当我在搜索RSACypthyServiceProvider时,我在MSDN上找到了以下代码示例。我在评论的帮助下无法理解代码的某些部分。
什么是模数和指数?
什么是IV?
为什么他们使用RijndaelManagedclass进行非对称加密?基于我的搜索RSACryptoServiceProvider提供非对称加密功能,它将在我们创建对象时自动创建私钥和公钥。那么RijndaelManaged实例的目的是什么?
任何人都可以解释一下吗?
代码示例:
class Class1
{
static void Main()
{
//Initialize the byte arrays to the public key information.
byte[] PublicKey = {Somethink in byte}
byte[] Exponent = {1,0,1};
//Create values to store encrypted symmetric keys.
byte[] EncryptedSymmetricKey;
byte[] EncryptedSymmetricIV;
//Create a new instance of the RSACryptoServiceProvider class.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Create a new instance of the RSAParameters structure.
RSAParameters RSAKeyInfo = new RSAParameters();
//Set RSAKeyInfo to the public key values.
RSAKeyInfo.Modulus = PublicKey;
RSAKeyInfo.Exponent = Exponent;
//Import key parameters into RSA.
RSA.ImportParameters(RSAKeyInfo);
//Create a new instance of the RijndaelManaged class.
RijndaelManaged RM = new RijndaelManaged();
//Encrypt the symmetric key and IV.
EncryptedSymmetricKey = RSA.Encrypt(RM.Key, false);
EncryptedSymmetricIV = RSA.Encrypt(RM.IV, false);
}
}
答案 0 :(得分:1)
RSA非常慢,并且有填充的开销。因此,生成随机对称密钥,使用RSA加密它,并使用对称密钥加密消息是很常见的。这种方法称为hybrid cryptosystem。
如果使用单个密钥加密多个消息,则IV很重要,但由于此代码为每个消息创建了一个新密钥,因此IV在此处并不重要。仍然使用IV可以防止多目标攻击,因此对于唯一密钥并不完全没用,特别是如果密钥只有128位。
这段代码也非常低效:它分别加密IV和密钥,而不是连接它们。这使RSA开销增加了一倍。
模数和指数是RSA公钥的两个部分。查找维基百科了解详情。指数通常选择为2^16 + 1 = 65537
,与此代码中的{1,0,1}
相对应。