openssl RSA加密方法初识
作为非对称加密算法,有两对密钥
一般用法
加密结果=RSA_EN(数据,公钥);
解密结果=RSA_DE(数据,私钥);
RSA填充 (RSA_public_encrypt和RSA_private_decrypt自动完成,不用操心,这里只做些说明)
RSA也是对数据分块处理,一般有两种填充方法,当然也可以不填充。
RSA_PKCS1_PADDING:数据块长度(字节)至少比RSA_size(rsa)小11字节。
这里的RSA_size(rsa) = 密钥长度(字节)
例如128Byte(1024bit)的密钥,每个数据块的最大长度就是128-11=117,
然后,加密出来的数据也是128Byte
如果要加密的数据块小于117Byte,比如说64Byte,就要对明文进行填充方式:
[0x02(表示采用公钥加密)][51个伪随机字节][0x00][数据块(64Byte)] 得到总长度117的数据块
如果采用私钥加密
[0x01(表示采用私钥加密)][51个0xff][0x00][数据块(64Byte)] 得到总长度117的数据块
接着填充分组(分组长度128Byte)
[0x00][0x01][8个0xff][0x00][数据块(117Byte)]
RSA_PKCS1_OAEP_PADDING:数据块长度(字节)至少比RSA_size(rsa)小41字节。
解释类似。
-_-!实在瞎编不下去了
int RSA_public_encrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa, int padding);
int RSA_private_decrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa, int padding);
flen:被加密的数据长度
from:被加密的数据
to :结果
rsa :密钥
padding :填充方式