我疯了吗?这是我的 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/