.NET で文字列の暗号化を行う

非対称アルゴリズム(ハッシュ化)

System.Web.Helpers.Crypt.HashPassword() が使える(他のも色々あるっぽいけど)。 ハッシュ化された文字列には使用された salt も含まれるので、使う側は salt の保存などは考慮する必要なく、また、同一文字列をハッシュ化しても別文字列を得ることが出来る。

Password management made easy in ASP.NET with the Crypto API | brockallen

対照アルゴリズム

種類はいくつかあるようだが、実質的に AesManaged クラス一択の様子。

暗号化に使用する IV については分かっても問題ないらしいので、毎回生成して、暗号化後の文字列の先頭に追加する形式をとった方が良い。 毎回生成することで、仮に同じ文字列を暗号化したとしても得られる暗号化済みの文字列は異なる文字列になる。 復号化の際は、先頭に IV が追加されていることを前提に処理する必要がある。

Key についてはどこか安全な場所に保存して使用する必要がある。Azure であればアプリ設定で良いと思うが、更に厳重に管理する必要があるなら Key Vault とかになるのではないかと思う。

BlockSize, Mode, Padding などのオプションは、既定の設定で問題ないっぽい。

AesManaged Class (System.Security.Cryptography) | Microsoft Docs