'暗号化用のデータ
Dim enc_key() As Byte _
= {
&HED, &HB, &H56, &HAF, &H61, &HA2, &H71, &H39,
&HE0, &H4B, &HDC, &HC9, &H23, &H69, &H8C, &HBD,
&HB9, &H86, &H98, &H28, &HC8, &H3E, &H62, &HA7,
&HFA, &H17, &HC1, &H33, &H64, &HBF, &H96, &H24
}
Dim enc_iv() As Byte _
= {
&H1F, &HDF, &H98, &H0, &H67, &H36, &H7D, &H3B,
&HFF, &HC9, &H3B, &H79, &H4D, &HD4, &H81, &H72
}
' 入力文字列をAES暗号化してBase64形式で返すメソッド
Function EncryptToBase64(plainText As String, key As Byte(), iv As Byte()) As String
' 入力文字列をバイト型配列に変換
Dim src() As Byte = Encoding.Unicode.GetBytes(plainText)
'WriteLine($"平文のバイト型配列の長さ={src.Length}")
' 出力例:平文のバイト型配列の長さ=60
' Encryptor(暗号化器)を用意する
Using am = New AesManaged()
Using encryptor = am.CreateEncryptor(key, iv)
' ファイルを入力とするなら、ここでファイルを開く
'Using inStream = New FileStream(FilePath, ……省略……
' 出力ストリームを用意する
Using outStream = New MemoryStream()
' 暗号化して書き出す
Using cs = New CryptoStream(outStream, encryptor, CryptoStreamMode.Write)
cs.Write(src, 0, src.Length)
' 入力がファイルなら、inStreamから一定量ずつバイトバッファーに読み込んで
' cse.Writeで書き込む処理を繰り返す(復号のサンプルコードを参照)
End Using
' 出力がファイルなら、以上で完了
' Base64文字列に変換して返す
Dim result() As Byte = outStream.ToArray()
'WriteLine($"暗号のバイト型配列の長さ={result.Length}")
' 出力例:暗号のバイト型配列の長さ=64
' 出力サイズはBlockSize(既定値16バイト)の倍数になる
Return Convert.ToBase64String(result)
End Using
End Using
End Using
End Function
' 暗号化されたBase64形式の入力文字列をAES復号して平文の文字列を返すメソッド
Function DecryptFromBase64(base64Text As String, key As Byte(), iv As Byte()) As String
' Base64文字列をバイト型配列に変換
Dim src() As Byte = Convert.FromBase64String(base64Text)
' Decryptor(復号器)を用意する
Using am = New AesManaged()
Using decryptor = am.CreateDecryptor(key, iv)
' 入力ストリームを開く
Using inStream = New MemoryStream(src, False)
' 出力ストリームを用意する
Using outStream = New MemoryStream()
' 復号して一定量ずつ読み出し、それを出力ストリームに書き出す
Using cs = New CryptoStream(inStream, decryptor, CryptoStreamMode.Read)
Dim buffer(4095) As Byte
Dim len As Integer = cs.Read(buffer, 0, 4096)
While (len > 0)
outStream.Write(buffer, 0, len)
len = cs.Read(buffer, 0, 4096)
End While
End Using
' 出力がファイルなら、以上で完了
' 文字列に変換して返す
Dim result() As Byte = outStream.ToArray()
Return Encoding.Unicode.GetString(result)
End Using
End Using
End Using
End Using
End Function
....
'result暗号化
Dim enc_result As String = EncryptToBase64(result, enc_key, enc_iv)
'result複合化
result = DecryptFromBase64(reg_s, enc_key, enc_iv)