VB.NET AESで暗号化

[English]

.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 StringAs 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 StringAs 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には標準で存在するため、特に注意する点はありません。

使用環境: Visual Studio 2010 .NET Framework 4