gpt4 book ai didi

c# - 对称算法的 key 生成

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:17 24 4
gpt4 key购买 nike

我有一个简单的对称加密/解密应用程序,运行良好:

namespace Crypto
{
class Program
{


public static void EncryptSomeText()
{
string original ="My secretdata!";

using (SymmetricAlgorithm symmetricAlgorithm =
new AesManaged())
{
byte[] encrypted = Encrypt(symmetricAlgorithm, original);
string roundtrip = Decrypt(symmetricAlgorithm, encrypted);

// Displays: My secret data! 
Console.WriteLine("Original:{ 0}", original);
Console.WriteLine("RoundTrip:{ 0}", roundtrip);
}
}

static byte[] Encrypt(SymmetricAlgorithm aesAlg, string plainText)
{
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt =
new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return msEncrypt.ToArray();
}
}
}

static string Decrypt(SymmetricAlgorithm aesAlg, byte[] cipherText)
{
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt =
new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}


static void Main(string[] args)
{
SymmetricAlgorithm sma = SymmetricAlgorithm.Create();

byte[] b = Encrypt(sma,"bla bla");
string s= Decrypt(sma, b);
Console.WriteLine("Decrypted {0}", s);


}
}
}

我只是想知道有关 key 创建的问题。这是否意味着它是在对称算法创建过程中以自动方式创建的?每次生成的都不一样吗?我想,用户应该为此目的传递 key 。

SymmetricAlgorithm sma =  SymmetricAlgorithm.Create();

最佳答案

当您访问 SymmetricAlgorithmKey 属性时会生成随 secret 钥,前提是您在此之前没有将 Key 设置为某个预定义的 key .它不是在构建 SymmetricAlgorithm 本身的过程中生成的。

var sma =  SymmetricAlgorithm.Create();
// no key generated here yet
var key = sma.Key; // generated key
// accessing `Key` causes random key generation


var sma = SymmetricAlgorithm.Create();
// no key here
sma.Key = myKey;
// you set the key, so no random key is generated

IV (nonce) 值也是如此。

生成随 secret 钥只有一次有意义,然后您必须以某种安全的方式在加密/解密方之间共享它,并将其用于 future 的加密/解密。当你在那里时,请注意 IV 值对于每次加密都应该是随机的,所以通常你只需将该 IV 值添加到加密的二进制数组中,然后在解密之前从加密数组的开头剪切该 IV,然后用于解密。

关于c# - 对称算法的 key 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com