RSA非对称算法加密相关内容

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/good123day/article/details/8523044
1. RSA算法初始化的时候一般要填入密钥长度,在96-1024bits间
密钥长度下限是96bits(12bytes)?
因为加密1byte的明文,需要至少1+11=12bytes长度的密钥,低于下限96bits时,一个byte都加密不了,无意义。


2.明文长度限制
明文长度(bytes) <= 密钥长度(bytes)-11.这样的话,对于上限密钥长度1024bits能加密的明文上限就是117bytes了.
如果明文长度大于那个最大明文长度了,就出现了分片加密,保证每片都别超过密钥长度(bytes)-11即可.
片数=(明文长度(bytes)/(密钥长度(bytes)-11))的整数部分+1,就是不满一片的按一片算

加密的明文长度不能超过RSA密钥的长度-11,比如:
1. 1024位的模长为128,加密时明文长度不能超过(128-11)即117个字节。 
2. 2048位的模长为256,加密时明文长度不能超过(256-11)即245个字节


密文的长度:
1. 不分片:密文长度 = 密钥长度
2. 分片:  密文长度 = 密钥长度*分片数量


各种 padding 对输入数据长度的要求:
 私钥加密:
 RSA_PKCS1_PADDING RSA_size-11
 RSA_NO_PADDING RSA_size-0
 RSA_X931_PADDING RSA_size-2
 公钥加密
 RSA_PKCS1_PADDING RSA_size-11
 RSA_SSLV23_PADDING RSA_size-11
 RSA_X931_PADDING RSA_size-2
 RSA_NO_PADDING RSA_size-0
 RSA_PKCS1_OAEP_PADDING RSA_size-2 * SHA_DIGEST_LENGTH-2
 
 现在中间件已实现每次可以超出以上明文长度的限制,主要取决于CSP加密接口函数:
BOOL CRYPTFUNC CryptEncrypt(
HCRYPTKEYhKey,
HCRYPTHASH hHash, 
BOOL Final, 
DWORD dwFlags, 
BYTE *pbData,
DWORD *pdwDataLen, 
DWORD dwBufLen);
该函数的最后一个参数表示接收返回密文的缓冲区长度,该长度根据不同算法有相应的计算方法,如下:
明文长度:DataLen
密文缓冲区长度:dwBufLen(实际应该大于等于该长度)


RAS 1024:
If (  0  = =  DataLen  % 117 )
{
dwBufLen= ( DataLen / 117 )  * 128;
}
Else
{
   dwBufLen= ( DataLen / 117 + 1 ) * 128;
}

RSA 2048:
If ( 0  = =  DataLen  % 245)
{
dwBufLen= ( DataLen / 245 )  * 256;
}
Else
{
   dwBufLen= (DataLen / 245 + 1) * 256;
}

猜你喜欢

转载自blog.csdn.net/good123day/article/details/8523044
今日推荐