.NET Frameworkには標準で暗号化クラスが容易されているので、簡単に暗号化・復号化を行うことができます。
下のサンプルでは固定文字列の暗号キーを使用して文字列の暗号化・復号化を行います。
暗号化のアルゴリズムは無線LANなどで良く使用されるAESを使用します。
Imports System.IO Imports System.Text Imports System.Security.Cryptography
' 128bit(16byte)のIV(初期ベクタ)とKey(暗号キー) Private Const AesIV As String = "!QAZ2WSX#EDC4RFV" Private Const AesKey As String = "5TGB&YHN7UJM(IK<" ''' <summary> ''' 文字列をAESで暗号化 ''' </summary> Private Function Encrypt(text As String) As String ' AES暗号化サービスプロバイダ Dim aes As New AesCryptoServiceProvider() aes.BlockSize = 128 aes.KeySize = 128 aes.IV = Encoding.UTF8.GetBytes(AesIV) aes.Key = Encoding.UTF8.GetBytes(AesKey) aes.Mode = CipherMode.CBC aes.Padding = PaddingMode.PKCS7 ' 文字列をバイト型配列に変換 Dim src As Byte() = Encoding.Unicode.GetBytes(text) ' 暗号化する Using enc As ICryptoTransform = aes.CreateEncryptor() Dim dest As Byte() = enc.TransformFinalBlock(src, 0, src.Length) ' バイト型配列からBase64形式の文字列に変換 Return Convert.ToBase64String(dest) End Using End Function ''' <summary> ''' 文字列をAESで復号化 ''' </summary> Private Function Decrypt(text As String) As String ' AES暗号化サービスプロバイダ Dim aes As New AesCryptoServiceProvider() aes.BlockSize = 128 aes.KeySize = 128 aes.IV = Encoding.UTF8.GetBytes(AesIV) aes.Key = Encoding.UTF8.GetBytes(AesKey) aes.Mode = CipherMode.CBC aes.Padding = PaddingMode.PKCS7 ' Base64形式の文字列からバイト型配列に変換 Dim src As Byte() = System.Convert.FromBase64String(text) ' 複号化する Using dec As ICryptoTransform = aes.CreateDecryptor() Dim dest As Byte() = dec.TransformFinalBlock(src, 0, src.Length) Return Encoding.Unicode.GetString(dest) End Using End Function
サンプルではIV(初期ベクタ)とKey(暗号キー)を固定の文字列にしていますが、IVに関してはプログラム自動的に生成し、暗号化文字列の先頭に付加しても良いみたいです。
暗号化したデータはバイト型配列となり、そのままでは扱い難いのでBase64形式の文字列に変換しています。
Base64形式変換することで、TextBoxなどにも表示できるstring型で出力しています。
この変換も.NET Frameworkには標準で存在するため、特に注意する点はありません。