RSA 加密或签名后的结果是不可读的二进制,使用时经常会转为 BASE64 码再传输。 RSA 加密时,对要加密数据的大小有限制,最大不大于密钥长度。例如在使用 1024 bit 的密钥时(genrsa -out rsa_private_key.pem 1024),最大可以加密 1024/8=128 Bytes 的数据。数据大于 128 Bytes 时,需要对数据进行分组加密(如...
如果是私钥签名,那么填充的前面两个字节为0x00和0x01(表示私钥签名),如果是公钥签名,那么填充的签名的两个字节为0x00和0x02(表示公钥签名),然后填充全FF,在填充最后的有效数据之前,会填充一个00,然后后面就全部是有效数据,所以使用RSA签名的数据再解密之后得到的数据在真是数据之前一定有00,否则就是输入没有严格...
private static final String PUBLIC_KEY = "RSAPublicKey"; /** * 获取私钥的key */ private static final String PRIVATE_KEY = "RSAPrivateKey"; /** * 签名算法 */ private static final String SIGNATURE_ALGORITHM = "MD5withRSA"; /** * 常量0 */ private static final int ZERO = 0; /** ...
因此真正的签名长度是 32 + (1+32) = 65;因为签名做了压缩(压缩格式下,公钥数据会以 02 / 03 开头,否则以 04 开头,04 开头的话,后面就要跟 length 40,然后是 64 字节了...)