おはようございます、私はvb.netプログラミングの初心者です。ユーザーのパスワードを暗号化して解読したかったので、以下のコードを思いついた。stringをbase64に暗号化および復号化する方法は?
Imports System.Security.Cryptography
Imports System.Text
Public Class UPdatePass
Dim DES As New TripleDESCryptoServiceProvider
Dim MD5 As New MD5CryptoServiceProvider
Function Encrypt(StringInput As String, Key As String) As String
DES.Key = MD5Hash(Key)
DES.Mode = CipherMode.ECB
Dim buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(StringInput)
Return Convert.ToBase64String(DES.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length))
End Function
Function Decrypt(EncryptedString As String, Key As String) As String
DES.Key = MD5Hash(Key)
DES.Mode = CipherMode.ECB
Dim Buffer As Byte() = Convert.FromBase64String(EncryptedString)
Return ASCIIEncoding.ASCII.GetString(DES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))
End Function
Function MD5Hash(value As String) As Byte()
Return MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(value))
End Function
End Class
コードを実行して復号化すると、このエラーメッセージが表示されます。
mscorlib.dllで 'System.Security.Cryptography.CryptographicException'の未処理例外が発生しました。 追加情報:復号化するデータの長さが無効です。
私は誰でもこれを手伝ってくれることを願っています。ありがとうございました!
これは実際には間違っています。 md5ハッシュを使用すべきではありません。パスワードを格納するために3DESを使用すべきではありません。パスワードを解読することによって決してパスワードをチェックするべきではありません。あなたの研究をやり直してください。塩漬けのハッシュを見てください。 PBKDF2は一般的な選択です。厳しいものではありませんが、セキュリティ分野で間違いを犯すのは簡単です。誰かが指摘しなくても残しておいた脆弱性には賢明ではありません。私はこれが単に学習の練習であっても、適切に学ぶ時間を取る価値があることを示唆しています。 – PaulG
入力したパスワードを「暗号化」し、それをユーザーに対して保存した「暗号化された」パスワードと比較する必要があります。絶対に "解読"しないでください。あなたが実際にここに持っているのは、ハッシュです。 –
パスワードについて話すとき、 'encrypt'という言葉は一切使用しないでください。暗号化とは根本的に異なる「ハッシュ」である必要があります。この記事はクイックスキムからのさらなる研究のために大丈夫と思われる:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right – PaulG