这是我实现的1024位(可以更改) RSA。我做错什么了吗?
public class Rsa:IEncryption
{
public AsymmetricCipherKeyPair Keys { get;private set; }
private readonly Pkcs1Encoding _engine;
public Rsa()
{
Keys = GenerateKeys();
_engine = new Pkcs1Encoding(new RsaEngine());
}
public byte[] Encrypt(byte[] buffer)
{
return Encrypt(buffer, 0, buffer.Length);
}
public byte[] Decrypt(byte[] buffer)
{
return Decrypt(buffer, 0, buffer.Length);
}
public byte[] Encrypt(byte[] buffer, int offSet, int length)
{
return RsaProcessor(buffer, offSet, length, Keys.Public);
}
public byte[] Decrypt(byte[] buffer, int offSet, int length)
{
return RsaProcessor(buffer, offSet, length,Keys.Private);
}
private byte[] RsaProcessor(byte[] data,int offset,int length, AsymmetricKeyParameter key)
{
_engine.Init(!key.IsPrivate, key);
var blockSize = _engine.GetInputBlockSize();
var result = new List<byte>();
for (var i = offset; i < offset+length; i += blockSize)
{
var currentSize = Math.Min(blockSize, offset + length - i);
result.AddRange(_engine.ProcessBlock(data, i, currentSize));
}
return result.ToArray();
}
public static AsymmetricCipherKeyPair GenerateKeys()
{
var rsaKeyParams = new RsaKeyGenerationParameters(BigInteger.ProbablePrime(512, new Random()),
new SecureRandom(), 1024, 25); //Unsure about the certinaty parameter
var keyGen = new RsaKeyPairGenerator();
keyGen.Init(rsaKeyParams);
return keyGen.GenerateKeyPair();
}
}发布于 2014-11-13 09:25:23
RsaProcessor()听起来像个名词。根据命名指南,你应该用动词或动词短语来命名你的方法。也许像Process()这样的简单名称在这里就足够了。在RsaProcessor()方法中,我建议将其介绍为Boolean forEncryption。就这样,这一行的意思
会很明显的。
private byte[] Process(byte[] data, int offset, int length, AsymmetricKeyParameter key)
{
Boolean forEncryption = !key.IsPrivate;
_engine.Init(forEncryption , key);
var blockSize = _engine.GetInputBlockSize();
var result = new List<byte>();
for (var i = offset; i < offset+length; i += blockSize)
{
var currentSize = Math.Min(blockSize, offset + length - i);
result.AddRange(_engine.ProcessBlock(data, i, currentSize));
}
return result.ToArray();
}否则,您的代码看起来很好。
关于您的Unsure about the certinaty parameter,请参阅https://stackoverflow.com/a/3087161/2655508
RSA密钥生成需要素数。然而,不可能产生绝对素数。和其他密码库一样,BC使用可能的素数。确定性表示你有多确定你希望这个数字是素数。任何超过80的东西都会大大减慢密钥生成速度。
https://codereview.stackexchange.com/questions/61860
复制相似问题