gpt4 book ai didi

c# - 使用 RSACryptoServiceProvider 加密数据在我看来是一个奇怪的功能

转载 作者:太空狗 更新时间:2023-10-29 21:40:58 26 4
gpt4 key购买 nike

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace EncryptionTest
{
class Program
{
static void Main(string[] args)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();

byte[] dataToEncrypt = ByteConverter.GetBytes("Test data");

string enc = Encrypt(dataToEncrypt);
}

static string Encrypt(byte[] data)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider encrypt = new RSACryptoServiceProvider();

byte[] encryptedData = encrypt.Encrypt(data, false); //Repeat this line

return ByteConverter.GetString(encryptedData);
}

}
}

我使用“设置下一条语句”重复执行以下语句,即没有执行任何其他代码行。byte[] encryptedData = encrypt.Encrypt(data, false);

我查看了encryptedData中的字节,发现encryptedData中的字节每次都变了。这肯定是错误的?如果公钥没有改变,要加密的数据也没有改变,那么 'encryptedData' 字节也不应该改变?

最佳答案

不,它正在按预期工作。每次调用 Encrypt 时,加密数据都会更改,因为它使用填充方案,该方案使用随机八位字节来加密纯文本。唯一重要的是 Decrypt(Encrypt(data)) 是否返回原始字节数组 data

RSA 填充 ( OAEP or PKCS#1 v1.5 compatible padding ) 是 RSA 安全所必需的。 padding 的随机部分也保证了多次加密明文返回的密文是不同的。这是一个重要的安全要求,攻击者不应该仅仅通过查找重复就能够找到有关纯文本的信息。

关于c# - 使用 RSACryptoServiceProvider 加密数据在我看来是一个奇怪的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9194323/

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