RSA标准中的密钥表示采用ASN.1语法, 公钥和密钥表示如下:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER, -- e
}
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coeffient INTEGER, -- (inverse of q) mod p
}
Version ::= INTEGER
记有数据块\(D\), 其字节长度应满足\(len(D)\le k\). 那么, \(D\)需要按照如下格式填充:
0x00
or0x01
, 公钥操作中为0x02
;BT=0x00
则填充为0x00
; BT=0x01
则填充为0xff
; BT=0x02
则填充为非0的随机数;将EB转换为正整数\(x\), \(x=\sum_{i=0}^{k-1}2^{8*(k-1-i)}EB_{i}\), \(EB_{i}\)表示\(EB\)从左往右的第i个字节所表示的十进制数.
RSA计算公式如下:
将整数\(y\)转换为字节数据块\(ED\), 满足\(y=\sum_{i=0}^{k-1}2^{8*(k-1-i)}ED_{i}\), \(ED_{i}\)表示\(ED\)从左往右的第i个字节所表示的十进制数.
解密过程是加密的逆过程, 除了RSA计算采用的是私钥指数\(y=x^d \mod n\), 其它按照加密的逆序操作即可;
原文:https://www.cnblogs.com/mengsuenyan/p/12706003.html