2016-04-19 34 views
1

おはようございます、私は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'の未処理例外が発生しました。 追加情報:復号化するデータの長さが無効です。

私は誰でもこれを手伝ってくれることを願っています。ありがとうございました!

+9

これは実際には間違っています。 md5ハッシュを使用すべきではありません。パスワードを格納するために3DESを使用すべきではありません。パスワードを解読することによって決してパスワードをチェックするべきではありません。あなたの研究をやり直してください。塩漬けのハッシュを見てください。 PBKDF2は一般的な選択です。厳しいものではありませんが、セキュリティ分野で間違いを犯すのは簡単です。誰かが指摘しなくても残しておいた脆弱性には賢明ではありません。私はこれが単に学習の練習であっても、適切に学ぶ時間を取る価値があることを示唆しています。 – PaulG

+1

入力したパスワードを「暗号化」し、それをユーザーに対して保存した「暗号化された」パスワードと比較する必要があります。絶対に "解読"しないでください。あなたが実際にここに持っているのは、ハッシュです。 –

+3

パスワードについて話すとき、 'encrypt'という言葉は一切使用しないでください。暗号化とは根本的に異なる「ハッシュ」である必要があります。この記事はクイックスキムからのさらなる研究のために大丈夫と思われる:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right – PaulG

答えて

0

あなたのコードは正常に動作します。暗号化のために入力したキーが復号化と同じであることを確認してください

+3

これは答えではなく、コメントとして追加する必要があります。 –

関連する問題