【发布时间】:2017-11-28 13:48:37
【问题描述】:
我有使用 BouncyCastle 库进行 RSA 加密的 c# 代码:
public string EncryptData(string publicKey, string data)
{
try
{
var bytesToEncrypt = Encoding.UTF8.GetBytes(data);
int srclen = bytesToEncrypt.Length;
//Prepare encryption engine
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
//Initialize Key
using (var txtreader = new StringReader(publicKey))
{
var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
encryptEngine.Init(true, keyParameter);
}
//Encrypt in loop
byte[] complete = new byte[0];
int src_block_size = encryptEngine.GetInputBlockSize();
for (int idx = 0; idx < srclen; idx += src_block_size)
{
int data_len = srclen - idx;
if (data_len > src_block_size)
{
data_len = src_block_size;
}
var encryptedChunk = encryptEngine.ProcessBlock(bytesToEncrypt, idx, data_len);
complete = CombineByteArrays(complete, encryptedChunk);
}
var finalString = Convert.ToBase64String(complete);
return finalString;
}
catch (InvalidCipherTextException)
{
}
}
如您所见,它将数据分块并加密每个块。当我加密数据时,我可以看到finalstring 是可变大小的(请注意finalString 基本上是加密字节的base64 编码)。不确定决定长度的因素是什么,以及它是我可以依赖的固定模式还是不确定的。我需要确保finalString 在限制范围内(字符数)。
【问题讨论】:
-
使用 RSA 作为分组密码是一个非常糟糕的主意,仅供参考......
标签: c# encryption cryptography bouncycastle