Ari*_*ieh 6 c# rsacryptoserviceprovider
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用'Set Next Statement'重复执行以下语句,即不执行任何其他代码行.
byte[] encryptedData = encrypt.Encrypt(data, false);
我查看了encryptedData中的字节,发现encryptedData中的字节每次都在变化.当然这是错的?如果公钥未更改且要加密的数据尚未更改,那么'encryptedData'字节也不应更改?
不,它按预期工作.加密数据每次都会更改,因为它使用填充方案,每次调用Encrypt时使用随机八位字节加密纯文本.唯一重要的是Decrypt(Encrypt(data))返回原始字节数组data.
RSA填充(OAEP或PKCS#1 v1.5兼容填充)是RSA安全所必需的.填充的随机部分还确保在多次加密纯文本时返回的密文是不同的.这是一项重要的安全要求,攻击者不应仅仅通过查找重复来查找有关纯文本的信息.
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |