我正在开发一个需要数字签名html文档的Android应用程序.该文档以JSON格式驻留在DB中.我正在使用我在其他一些SO问题上找到的BASH脚本在本地签署文档:
openssl dgst -sha1 someHTMLDoc.html > hash
openssl rsautl -sign -inkey privateKey.pem -keyform PEM -in hash > signature.bin
使用以下代码生成私钥:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3 -out privateKey.pem
Run Code Online (Sandbox Code Playgroud)
使用以下公式生成公钥:
openssl pkey -in privateKey.pem -out publicKey.pem -pubout
Run Code Online (Sandbox Code Playgroud)
我想在应用程序中验证Signature.bin中创建的签名以及someHTMLDoc.html中的数据.
我发送html和签名作为JSON对象ex:
{ "data" : "<html><body></body></html>", "signature":"6598 13a9 b12b 21a9 ..... " }
Run Code Online (Sandbox Code Playgroud)
android应用程序将PublicKey保存在共享首选项中,如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0AAAEFAAOCAQ0AvniCAKCAQEAvni/NSEX3Rhx91HkJl85
\nx1noyYET ......
注意那里的"\n"(换行符)(从publicKey.pem复制字符串到Android Gradle Config时自动添加.
好的,经过一切准备,现在的问题.我试图验证密钥没有成功.
我使用以下代码:
private boolean verifySignature(String data, String signature) {
InputStream is = null;
try {
is = new …Run Code Online (Sandbox Code Playgroud)