gpt4 book ai didi

c# - C# 中的 RSA 不会为特定 key 生成相同的加密字符串?

转载 作者:行者123 更新时间:2023-11-30 14:00:57 25 4
gpt4 key购买 nike

我有一个要求,我需要在一个应用程序中加密我的连接字符串并在另一个应用程序中解密它。考虑到这一点,我将公钥和私钥分别保存在应用程序的App.Config中。

现在,RSA 不应该给我相同的加密字符串和我使用的相同 key 吗?

我总是使用相同的 key 得到不同的加密字符串。!!请帮助我消除困惑。我不明白如何解决这个问题,如果我使用保存的加密字符串,我会得到 BAD Data 异常,因为每次加密都会给我不同的加密字符串。

这是我的代码:

private string connecString;
private RSACryptoServiceProvider rsaEncryptDecrypt;

public EncryptAndDecrypt(string connecString)
{
this.connecString = connecString;
this.rsaEncryptDecrypt = new RSACryptoServiceProvider(4096);
}

public string EncryptTheConnecString(string publicKeyValue)
{
byte[] encryptedData;
rsaEncryptDecrypt.FromXmlString(publicKeyValue);

byte[] message = Encoding.UTF8.GetBytes(connecString);
encryptedData = rsaEncryptDecrypt.Encrypt(message, false);

return Convert.ToBase64String(encryptedData);
}

public string DecryptTheConnecString(string privateKeyValue, string encrystr)
{
byte[] decryptedData;
rsaEncryptDecrypt.FromXmlString(privateKeyValue);

byte[] message = Convert.FromBase64String(encrystr);
decryptedData = rsaEncryptDecrypt.Decrypt(message, false);

return Encoding.UTF8.GetString((decryptedData));
}

提前谢谢你。

更新 1:我用过

UnicodeEncoding ByteConverter = new UnicodeEncoding();
ByteConverter.GetBytes("data to encrypt");
//Which is not Connection string but a small test str

我仍然看到加密数据每次都在变化。但是 Bad Data 错误不再出现。 然而 我不能在 Encoding.UTF8 上使用 UTF16(UnicodeEncoding) 因为它不能像连接字符串那样加密巨大的字符串并抛出异常:

 CryptographicException: Key not valid for use in specified state.

更新 2:

我可以通过使用 UTF8Encoding ByteConverter = new UTF8Encoding(); 然后执行 ByteConverter .GetString("HUGE STRING"); 来解决错误数据的问题。 p>

最佳答案

这可能是因为 Random Padding 而发生的.

关于c# - C# 中的 RSA 不会为特定 key 生成相同的加密字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484508/

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