暗号化された文字列をSQLデータベースにバイト配列として格納したいのですが、何が間違っているのか分かりません。コードはこれです:AES暗号化を使用した文字列の暗号化と復号化 - C#
private void loginBtn_Click(object sender, EventArgs e)
{
try
{
string password = passwordBox.Text.ToString();
using (Aes algorithm = Aes.Create())
{
byte[] encryptedPassword = EncryptString(password, algorithm.Key, algorithm.IV);
string roundTrip = DecryptString(encryptedPassword, algorithm.Key, algorithm.IV);
MessageBox.Show("Encrypted Password: " + encryptedPassword.ToString() + '\n' + "Round Trip: " + roundTrip.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
そして「EncryptString」と「DecryptString」のために使用されるコードはMicrosoft's Aes Class Reference(ページの端に位置例)からのものです。
私は私のコードを実行し、それがメッセージボックスで私を与えるすべてがこれです:
Encrypted Password: System.Byte[]
Round Trip: (empty space)
static byte[] EncryptString(string str, byte[] key, byte[] IV)
{
if (str == null || str.Length <= 0)
throw new ArgumentNullException("string");
if (key == null || key.Length <= 0)
throw new ArgumentNullException("key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
byte[] encrypted;
using (Aes algorithm = Aes.Create())
{
algorithm.Key = key;
algorithm.IV = IV;
ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(str);
}
encrypted = msEncrypt.ToArray();
}
}
}
return encrypted;
}
static string DecryptString(byte[] cipher, byte[] key, byte[] IV)
{
if (cipher == null || cipher.Length <= 0)
throw new ArgumentNullException("cipher");
if (key == null || key.Length <= 0)
throw new ArgumentNullException("key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
string decrypted;
using (Aes algorithm = Aes.Create())
{
algorithm.Key = key;
algorithm.IV = IV;
ICryptoTransform decryptor = algorithm.CreateDecryptor(algorithm.Key, algorithm.IV);
using (MemoryStream msDecrypt = new MemoryStream())
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
decrypted = srDecrypt.ReadToEnd();
}
}
}
}
return decrypted;
}
誰かが、私はそれを修正してください助けることができますか?
P.S.テキストボックスは、シャアがDecryptString
方法では*に
私にとってうまく動作します。あなたの実際の暗号化/復号化コードを投稿してください。 –
このプログラムは正しく動作します。 'string password =" ABCD "'で、roundTripは "ABCD"を含んでいます。あなたは何をパスワードとして試しましたか? Microsoftの例から、 'EncryptString'と' DecryptString'メソッドを変更しましたか? –
MessageBox.Show( "Encrypted Password:" + Encoding.ASCII.GetString(encryptedPassword)+ '\ n' + "Round Trip:" + roundTrip)にメッセージ行を変更した方が良いでしょう。 (おそらくACIIの代わりにUTF、あなたのキャラクターセットに依存します)。 –