小编avh*_*avh的帖子

Java/BouncyCastle 签名的 OpenSSL 等效项

我有一个软件进行数字签名,如下所示。

    MessageDigest md = MessageDigest.getInstance("SHA1", "BC");
    Cipher cipher = Cipher.getInstance("RSA/None/NoPadding", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, privateKey);
    byte[] hash = md.digest("message".getBytes());
    byte[] signature = cipher.doFinal(hash);
Run Code Online (Sandbox Code Playgroud)

我想用批处理/openssl 的一些行替换它,但未能重现此签名。基本上它是 SHA1 和 RSA 的组合,这还不错。我想知道为什么哈希和加密是分开的。使用 openssl 执行此操作的两种方法都会产生不同的签名(忽略格式):

openssl dgst -sha1 -binary msg.txt > hash
openssl rsautl -sign -inkey priv.pem -in hash -hexdump
Run Code Online (Sandbox Code Playgroud)

openssl dgst -sha1 -sign priv.pem -hex < msg.txt
Run Code Online (Sandbox Code Playgroud)

所以我缺少一些东西......

更新:

感谢您的意见!当然,这段Java代码不是正确进行签名的方法,但是验证的代码不在我手中,我的目标是创建一个可以验证的签名。不过,我会提出改变整个事情的建议。

但我终于成功地重现了签名。我自己不回答这个问题,因为我想要一个合适的 openssl 解决方案。这就是我得到的:

上面的Java代码做了填充!哈希码预填充了零字节,长度为 256!

java openssl bouncycastle

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

在Windows批处理`for`循环中没有换行符的回声

请注意:这个问题不是关于如何在没有换行符的情况下回应.它将在没有换行的情况下管道变量,并将结果存储在另一个变量中.请不要将此问题标记为与仅回答如何删除换行符的其他问题重复!

我有一个变量a,我想传递给一个程序(让我们more为了这个例子使用),它的结果应该存储到另一个变量中b.这是为了防止创建临时文件.从这里得到其他问题的一些答案,这可以通过以下方式实现:

FOR /f "tokens=*" %%t IN ('ECHO %a% ^| MORE') DO SET b=%%t
Run Code Online (Sandbox Code Playgroud)

哪个有效 - 但是会在我的变量上添加另一个换行符!所以我尝试了你在stackoverflow/superuser上找到的以下技巧来防止换行.如果你没有循环这样做,它们完美地工作!但是一旦你把它们放在循环中,它们就会失败:

FOR /f "tokens=*" %%t IN ('ECHO ^| SET /p="%a%" ^| MORE') DO SET b=%%t
FOR /f "tokens=*" %%t IN ('^<NUL SET /p="%a%" ^| MORE') DO SET b=%%t
Run Code Online (Sandbox Code Playgroud)

总会说The syntax of the command is incorrect.我错过了什么?请帮我!

windows cmd batch-file

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

标签 统计

batch-file ×1

bouncycastle ×1

cmd ×1

java ×1

openssl ×1

windows ×1