java - 无法从 bouncycaSTLe 和 openssl dgst 获取匹配的 SHA1 摘要

标签 java scala shell bouncycastle sha

我疯了吗?这是我的 scala 代码 "org.bouncycaSTLe"% "bcprov-jdk15on"% "1.59"

import java.util.Base64
import java.security.MessageDigest
import org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.Security
import java.nio.charset.Charset

Security.addProvider(new BouncyCastleProvider)
val sha1 = MessageDigest.getInstance("SHA1", "BC")
val digest = sha1.digest("foo".getBytes(Charset.forName("UTF-8")))

Base64.getEncoder.encodeToString(digest)

对于 foo 输入 C+7Hteo/D9vJXQ3UfzxbwnXaijM=

Openssl:

openssl dgst -binary -sha1 <<< "foo" | openssl enc -base64

对于foo输入8dLS+STphqyG/fezbJS83zK+7BU=

MD5 和 SHA256 也会发生同样的情况 显然有人在做一些与其他人不同的事情..但是什么?

我在openssl enc -base64和java.util.Base64之间单独验证了base64编码,并且openssl输出中似乎有一个额外的字符(..),加上java.util.Base64 pads,否则它是匹配的

scala> Base64.getEncoder.encodeToString("foo,bar,etc".getBytes(Charset.forName("UTF-8")))
res6: String = Zm9vLGJhcixldGM=

$ openssl enc -base64 <<< "foo,bar,etc"
Zm9vLGJhcixldGMK

最佳答案

这是因为 shell 在 <<< foo 末尾添加了换行符,所以 openssl 看到的字符串不仅仅是“foo”,而是“foo\n”。

尝试echo -n foo | openssl dgst -binary -sha1 | base64

关于java - 无法从 bouncycaSTLe 和 openssl dgst 获取匹配的 SHA1 摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344534/

相关文章:

java - 我如何从枚举中选择随机值?

java - 在 junit 3 中模拟一个具体类

java网络接受线程之间的网络连接

java - 如何为给定字符串中的每个单词添加前缀

Scala 参数模式(喷雾路由示例)

scala - 如何找到HDFS上存在的文件的正确URI

sql - 从 Oracle 查询中提取表引用

scala - 如何在 Scala 中使用 IO monad 实现短路

bash - java命令行中的-h选项是什么意思?

bash - 比较目录内所有文件的内容