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 :填充方式



posted on 2016-10-18 13:54  阮減显  阅读(332)  评论(0编辑  收藏  举报

导航