現在、文字列を暗号化し、C#でAES-128対称暗号化を使用してバイト配列を復号化する方法が必要です。私はこれを行う方法を見つけることができませんが、多分私は何かを逃した。IVなしでAES 128を使用して暗号化と復号化を行うにはどうすればよいですか?
答えて
インポート名前空間
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
static void Main(string[] args)
{
string value = "@arifansari300<3>";
string encryptedValue= EncryptDecrypt.Encrypt(value);
string decryptedValue = EncryptDecrypt.Decrypt(encryptedValue);
}
public static string Encrypt(string clearText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new
Rfc2898DeriveBytes(EncryptionKey, new byte[]
{ 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}
public static string Decrypt(string cipherText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new
Rfc2898DeriveBytes(EncryptionKey, new byte[]
{ 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}
'Rfc2898DeriveBytes'は、適切な鍵を生成する代わりにエンドユーザが入力したパスワードを使用する必要がある場合にのみ適しています。しかし、その場合は、塩を使用してください(例では定数で、IV点を見落とします)、繰り返し回数を少なくする必要があります(最低20k、好ましくはそれ以上)。適切な鍵をお持ちであれば、通常の暗号化はより簡単で、*はるかに高速です。 – CodesInChaos
この関数をPHPに変換するにはどうしたらいいですか? – user3581428
@ CodeInChaos「通常の暗号化」とはどういう意味ですか? –
- 1. AES-128暗号化/復号化
- 2. AES 256 IVなしの暗号化/復号化
- 3. LinuxカーネルでAESを使用した暗号化と復号化
- 4. PHPでAES CBC + CTS(暗号文の盗用)モードを使用してデータを暗号化/復号化するにはどうすればよいですか?
- 5. AESは異なるIVでどのように復号化されますか?
- 6. AES暗号化/復号化
- 7. SHC暗号化を使用してシェルファイルを復号化するにはどうすればよいですか?
- 8. opensslを使用したAES(aes-cbc-128、aes-cbc-192、aes-cbc-256)暗号化/復号化C
- 9. IVでAES-128 CBC暗号化はどのように目的Cで動作しますか?
- 10. RSAとAESを使用した暗号化/復号化。基準?
- 11. シンプルなファイルの暗号化と復号化を行うにはどうすればよいですか?
- 12. JavaのAES 128暗号化PHPの復号化
- 13. AES java.security.InvalidAlgorithmParameterException:間違っIVの長さは:私のJavaアプリケーションでAES暗号化を使用してデータを暗号化しようとして長い
- 14. AES暗号化は、復号化は、Java
- 15. Python:AESでの暗号化と復号化に同じIVを使用する
- 16. ユーザーパスワードを使用してaes暗号化を実行するにはどうすればよいですか?
- 17. AESでopensslコマンドラインツールで暗号化し、Javaで復号化する
- 18. アンドロイドでAESを使用した暗号化とJavaでの復号化
- 19. MSCAPIでncipher CSPを使用してAES暗号化を行う
- 20. PDFsharpを使用してAES 128ビット暗号化ファイルを開く
- 21. DirectComputeを使用するAES暗号化/復号化のサンプルコード
- 22. 暗号化を使用してRC6で暗号化と復号化を行う方法
- 23. AESアルゴリズムを使用してC#でjavascriptと暗号化を暗号化する
- 24. JavaとPHPを使用したAES CBC 128ビット暗号化
- 25. ASP.Netでファイルを暗号化し、Silverlightで復号化するにはどうすればよいですか?
- 26. ESP8266 AESの暗号化 - 復号化
- 27. 暗号化復号化AES/ECB/NoPadding
- 28. 暗号化C#復号化AES CBC 256
- 29. AESを使用して暗号化された画像のように復号化された画像
- 30. aes-256-cbc暗号化/復号化キーが機能しない
なぜあなたがIVを避けるためにしたいですか?それらは重要なセキュリティ機能です。 – CodesInChaos
@CodesInChaosコメントを拡張します。 IVはランダムに生成され、暗号文とともにクリアに送信される。安全のためIVの秘密は必要ではありません。 IVの要件は、同じキーとIVの組み合わせを再利用しないことと、IVを予測することが難しいことです。 – Dev
この質問は、誰かがIVなしでAESを使用して暗号化に興味を持っていたプロジェクトのためのものです。私は彼らが重要なセキュリティ機能だと同意する! – kdh