前述の回答で説明したように、対称アルゴリズム(暗号化と復号化に単一の秘密鍵が使用される)が有効です。私はDESアルゴリズムの使い方を手にしています。この暗号化ルーチンは、バイト配列(フレームワーク暗号化クラスの '自然な'出力)ではなく、暗号化プロセスの出力を返します(また復号化は入力として)。
Private key() As Byte = {}
Private IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
Private Const EncryptionKey As String = "abcdefgh"
Public Function Decrypt(ByVal stringToDecrypt As String) As String
Try
Dim inputByteArray(stringToDecrypt.Length) As Byte
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
Public Function Encrypt(ByVal stringToEncrypt As String) As String
Try
key = System.Text.Encoding.UTF8.GetBytes(Left(EncryptionKey, 8))
Dim des As New DESCryptoServiceProvider
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
'oops - add your exception logic
End Try
End Function
編集追加する:
ここで私は、そのモジュールを持っているインポートは、次のとおり
Imports System
Imports System.IO
Imports System.Xml
Imports System.Text
Imports System.Security.Cryptography
DES鍵の長さが56ビット(8バイトまたは文字のちょうど短い)であります。最近、非常に安全だとは考えられていませんが(this Wikipedia article on key sizes参照)、「安全なアイ」と書いてあるように、大丈夫です。より安全な暗号化が必要な場合は、より安全なアルゴリズムを使用して調査する必要があります。
上記のルーチンの暗号化キーは、プライベート定数EncryptionKeyにあります。その値を目的のキーに変更します。または、独自のキー管理(ファイルからの入力、ユーザーへの問い合わせなど)を実装することもできます。
LeftとConvertが壊れている理由がわかりません。 LeftはMicrosoft.VisualBasic.Stringsのメンバーで、ConvertはSystemのメンバーです。
Remus Rusanuにリンクされている記事やそれらからリンクされている記事を読むことを強くお勧めします。彼らはフレームワーククラスの暗号化に関する多くの背景をあなたに提供します。
さて、これらの機能はどうやって使うのですか?私はまだ少し混乱しています。その暗号化( "Somestringhere")と復号化( "somestringhere")?その鍵を変更することはできますか? ありがとうございます、このように見えます! – Cyclone
キーの長さはどのくらいですか? – Cyclone
Err、ここではネームスペースを明確にインポートする必要があります。何をインポートしますか? – Cyclone