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\)需要按照如下格式填充:
0x00or0x01, 公钥操作中为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