0

暗号化された値をデータベースに保存し、データベースから値を取得しながら、復号化して UI に値を表示したいと考えています。これが私が使用したコードです

private string Decryptdata(string encryptpwd)
{
    string decryptpwd = string.Empty;
    UTF8Encoding encodepwd = new UTF8Encoding();
    Decoder Decode = encodepwd.GetDecoder();
    encryptpwd = encryptpwd.Replace(" ", "+");
    byte[] todecode_byte = Convert.FromBase64String(encryptpwd);
    int charCount = Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
    char[] decoded_char = new char[charCount];
    Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
    decryptpwd = new String(decoded_char);
    return decryptpwd;
}

しかし、Base-64 char 配列の無効な長さとしてエラーが発生します。私はc#.netを使用しています

暗号化機能:

Encryptdata(string password) { 
       string strmsg = string.Empty; 
       byte[] encode = new byte[password.Length]; 
       encode = Encoding.UTF8.GetBytes(password); 
       strmsg = Convert.ToBase64String(encode); 
       return strmsg; 
}
4

1 に答える 1

3

平文を取得できるようにする必要がある本当に正当な理由がない限り、パスワードをデータベースに保存している場合は、パスワードを暗号化または平文で保存するのではなく、パスワードをハッシュする必要があります。

暗号化とハッシュの違いは、ハッシュでは取得できない平文を暗号化で取得できることです。パスワードを保存するときは、ユーザーが提供したパスワードを取得してハッシュする必要があります (理想的にはソルトを使用)。その後、ユーザーが次回パスワードを使用してログインしようとしたときに、再度ハッシュし、保存されたハッシュを比較します。生成したばかりのもので、一致する場合は同じです。

これについては、ここ (パスワードの保存、正しく行う方法) に詳しい説明を書いています。

私は自分のウェブサイトでコードを使用していくつかのハッシュ関数を利用できます (VB.NET ですが、C# に簡単に移行できます)。おそらく、SHA512 を使用するのが最適です (文字列またはファイルの SHA512 ハッシュを計算します)。

ハッシュなどについてまだよくわからない場合は、わからないことを遠慮なく言ってください。私がお手伝いします :)

于 2013-04-17T10:48:16.133 に答える