C#で書かれたサーバーアプリケーションでAESを使用してデータを暗号化します。C#とCryptoJSを使用した異なる暗号化結果
async Task<byte[]> Encrypt(string privateKey, string pin, byte[] data)
{
using (var sha = SHA256.Create())
{
byte[] keyHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{privateKey}"));
byte[] pinHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{pin}"));
using (Aes aes = Aes.Create())
{
byte[] key = keyHash.Slice(0, aes.Key.Length);
byte[] iv = pinHash.Slice(0, aes.IV.Length);
using (ICryptoTransform transform = aes.CreateEncryptor(key, iv))
using (var stream = new MemoryStream())
using (var cryptStream = new CryptoStream(stream, transform, CryptoStreamMode.Write))
{
await cryptStream.WriteAsync(data, 0, data.Length);
await cryptStream.FlushAsync();
return stream.ToArray();
}
}
}
}
暗号化された結果:私はこれは私がデータを暗号化するために使用私のC#のコードである
Key: 81fe1681..6a451c1c
IV: e83c..ae76
...たとえば、事前に定義されたキー(32バイト)とIV(16バイト)を使用しますデータは次のようになります...
534c..28f5
ここで、私はCryptoJSを使用してクライアントアプリケーションでデータを復号したいと考えています。私はまったく同じキーとIV情報を使用しますが、復号化は失敗するようです...少なくとも復号化された結果は常に空です。
私はクライアント上のデータを暗号化しました(もちろん、同じキーとIVです)。その結果、暗号化されたテキストは異なります。より正確には、それは同じですが、最後に、より多くのデータを持っている...私は、サーバー上のデータを暗号化した場合に取得ドント最後にこの追加データは
534c..28f5bbd5..ac0e
は何ですか?
クライアントで暗号化された暗号化されたテキストを復号化すると、復号化が機能します。言及すると、モードとパディングはサーバーとクライアントの両方でデフォルトであり、CBC
とPkcs7
です。 keysizeは256
である必要があります。これはサーバーで暗号化されたデータを復号化するために使用するコードです。
ありがとう。それは問題を解決しました。 – Matze