加解密过程遇到的问题及解决方法

私钥公钥格式

常见的加解密

  1. 导入jar包:javabase64-1.3.1.jar

  2. 生成base64编码后的公钥和私钥

  3. 公钥加密私钥解密, 或者私钥加密公钥解密

这里生成的公钥和私钥是经过base64编码的, PEM格式的, 进行了pkcs8编码的字符串。加密的过程要创建私钥或者公钥的实例。

调用XXX公司接口加密

在制作加密锁的过程中, 私钥和公钥文件是客户端调用XXX公司接口产生的。私钥不可以读出, 公钥可以读出。但是可以在本地产生公钥文件和私钥文件。

可以调用该公司的接口通过私钥加密, 然后调用java接口使用公钥解密。 但是创建公钥实例过程总报错,类似于init format错误。

原来,调用XXX公司接口产生的公钥和私钥, 是人家XXX公司特有的格式, 需要对私钥和公钥进行格式转换, 转换成PEM格式。

XXX公司给的开发包中, 含有转换工具, 可以利用转换工具将特定格式的私钥文件和公钥文件转换成PEM格式的文件。

转换后, 可以知道查看文件知道私钥串和公钥串。 如果拔掉加密锁, 调用javabase64-1.3.1.jar中的接口,在创建公钥实例或者私钥实例的过程仍然报错(algid parse error, not a sequence​), 这是因为此时的PEM格式私钥和公钥是PKCS#1编码, 没有转换成PKCS8编码。 可以下载openssl工具, 使用openssl命令将私钥文件和公钥文件进行pkcs8编码, 也可以使用在线工具进行转换(http://tool.chacuo.net/cryptrsapkcs1pkcs8)。

私钥文件进行pkcs8编码命令:
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

公钥文件在进行pkcs8编码的过程总是报错, 我觉得, 公钥文件pkcs8编码需要私钥文件, 因此通过在线工具是不行的。只能通过openssl命令, 注意和私钥进行pkcs8编码命令不同:
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

转换之后, 就可以调用jar包中的接口进行加密解密了。

而且通过测试,还可以使用XXX公司的私钥加密(使用该公司格式私钥文件,调用该公司接口)。然后使用jar包中的java接口解密(使用PEM格式公钥, 调用Java接口)。我觉得, 该公司加密接口,应该也是先将私钥格式转换成PEM格式, 然后加密。

-----------------------------------------2018-06-07--------------------------------------------------------
生成PKCS#1编码私钥
genrsa -out rsa_private_key.pem 1024

你可能感兴趣的:(加解密过程遇到的问题及解决方法)