相关疑难解决方法(0)

openssl命令行来验证签名

嗨,我已生成密钥对,并使用私钥生成签名.

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用我的公钥验证签名:

openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig
Run Code Online (Sandbox Code Playgroud)

我知道-sigfile已被弃用.openssl.org的一些在线文档是错误的.

什么命令我应该使用我的公钥来验证信号?

ubuntu command-line openssl digital-signature

22
推荐指数
1
解决办法
8万
查看次数

M2crypto签名“算法”

这两个代码提供相同的签名,这是预期的:

代码1:

from M2Crypto import RSA, EVP
import base64, hashlib

text = "some text"

pkey = EVP.load_key("mykey.pem")  #"mykey.pem" was generated as: openssl genrsa -des3 -out mykey.pem 2048
pkey.sign_init()
pkey.sign_update(text)
signature = pkey.sign_final()
print base64.b64encode(signature)
Run Code Online (Sandbox Code Playgroud)

代码2:

pkey = RSA.load_key("mykey.pem")
signature = pkey.sign(hashlib.sha1(text).digest())
print base64.b64encode(signature)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想“模仿”签名算法,即用私钥加密摘要,则会得到一个不同的签名,即:

pkey = RSA.load_key("mykey.pem")
signature = pkey.private_encrypt(hashlib.sha1(text).digest(), RSA.pkcs1_padding)
print base64.b64encode(signature)  #different from the two above
Run Code Online (Sandbox Code Playgroud)

您能提供一些解释吗?后一种签名方式有什么问题?

python digital-signature m2crypto

5
推荐指数
1
解决办法
2872
查看次数

OpenSSL RSA签名验证:哈希和填充?

我正在尝试编写代码来验证一些RSA签名.签名是使用OpenSSL命令行工具制作的,使用此命令行的等效命令:

openssl dgst -sha1 -sign private_key_file.pem < binary_data_file > sig
Run Code Online (Sandbox Code Playgroud)

我想用来libtomcrypt做验证:

http://www.libtom.org/

以下是RSA验证函数的调用签名libtomcrypt:

int rsa_verify_hash_ex(
    const unsigned char *sig, unsigned long siglen,  // signature to verify
    const unsigned char *hash, unsigned long hashlen,  // hash value to check against sig
    int padding,  // defined constant value, see below
    int hash_idx,  // identifies which hash algorithm, see below
    unsigned long saltlen,  // specify salt length, see below
    int *stat,  // output parameter, returns whether verify succeeded or …
Run Code Online (Sandbox Code Playgroud)

c openssl rsa libtomcrypt

5
推荐指数
1
解决办法
8837
查看次数

在Android上验证数字签名

我正在开发一个需要数字签名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)

java android json digital-signature

5
推荐指数
1
解决办法
4150
查看次数

使用C例程和openssl dgst,rsautl命令时的不同签名

我正在使用以下语句来创建RSA公钥和私钥。

openssl genrsa -out ksign_private.pem 1024 openssl rsa -in ksign_private.pem -pubout> ksign_public.pem

然后我有使用从openssl libcrypto函数使用PEM_read_RSAPrivateKey,EVP_PKEY_assign_RSA,EVP_SignInit,EVP_SignUpdate,EVP_SignFinal函数来生成签名文件的程序。

我还有一个例程可以验证可以使用PEM_read_RSA_PUBKEY,EVP_PKEY_assign_RSA,EVP_VerifyInit,EVP_VerifyUpdate,EVP_VerifyFinal进行验证。这些例程的源代码附在下面。

使用这些功能时,我可以创建SHA1签名,使用私钥对其进行加密,然后使用公钥对其进行解密。

但是,我尝试使用openssl rsautl使用相同的数据文件,相同的私钥,公共密钥,而openssl rsautl创建的签名却大不相同。

openssl dgst -sha1 -binary < myData > testfile.sha1
openssl rsautl -sign -in testfile.sha1 -inkey ksign_private.pem -keyform PEM -out testfile.sig
Run Code Online (Sandbox Code Playgroud)

谁能告诉我使用openssl rsautl或dgst命令时我使用了哪些错误选项?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <string.h>
#include <openssl/sha.h>
#include <errno.h>
#include <getopt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

int ksignEvpSign(FILE * private_key, FILE * inFileFP, FILE * outFileFP);
int ksignEvpVerify(FILE …
Run Code Online (Sandbox Code Playgroud)

c openssl rsa signature

4
推荐指数
1
解决办法
5945
查看次数

node.js加密签名和openssl签名不匹配

我想对node.js中的文件执行RSA-SHA512。我可以计算给定数据文件的sha512哈希值,该哈希值与openssl的匹配。但是,当尝试在同一哈希上获取数字签名时,node.js签名与openssl签名不同。以下是示例代码片段:

var data = new Buffer(512);
data = fs.readFileSync('/tmp/data');
var pem = fs.readFileSync('/tmp/boot2-prvKey.pem');
var privateKey = pem.toString('ascii');

var signer = crypto.createSign("RSA-SHA256");
signer.update(data);
var sign = signer.sign(privateKey, 'hex');
console.log("SIGN " + sign + '\n');
Run Code Online (Sandbox Code Playgroud)

Openssl命令对数据进行签名:

openssl rsautl -sign -in /tmp/data -inkey /tmp/boot2-prvKey.pem -out sig
Run Code Online (Sandbox Code Playgroud)

以上两种都生成不同的签名。

我有两个问题:1)我想计算文件的RSA-SHA256,因此我首先计算整个文件的sha256哈希,然后将此哈希作为输入传递给签名函数。那是正确的方法吗?2)如果是,那么上面的代码可能出了什么问题?如果没有,正确的方法是什么?

我正在使用的node.js版本是0.10.36,openssl版本是1.0,1。

openssl rsa sha256 digital-signature node.js

2
推荐指数
1
解决办法
1286
查看次数