无法从bouncycastle和openssl dgst中获取匹配的SHA1摘要

问题描述 投票:0回答:2

我疯了吗?这是我的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填充,否则就是匹配项] >

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

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

我疯了吗?这是我的scala代码,其中包含“ org.bouncycastle”,“ bcprov-jdk15on”,“ 1.59”。

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

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

我必须回答一个多余的答案,因为我以同样的问题到达这里,而我的业力小于15。

echo test|openssl dgst -md4 (stdin)= 36d729ab4ff7260da6fb010ef5747bb3 echo -n test|openssl dgst -md4 (stdin)= db346d691d7acc4dc2625db19f9e3f52

第二个结果也证实了充气城堡。在此响应时,有一个带有md4选项的在线摘要检查器,它也同意第二个结果。 
java scala shell bouncycastle sha
2个回答
3
投票
这是因为shell在<<< foo的末尾添加了换行符,所以openssl看到的字符串不仅是“ foo”,而且是“ foo \ n”。

0
投票
我必须回答一个多余的答案,因为我以同样的问题到达这里,而我的业力小于15。

echo test|openssl dgst -md4 (stdin)= 36d729ab4ff7260da6fb010ef5747bb3 echo -n test|openssl dgst -md4 (stdin)= db346d691d7acc4dc2625db19f9e3f52

第二个结果也证实了充气城堡。在此响应时,有一个带有md4选项的在线摘要检查器,它也同意第二个结果。 
© www.soinside.com 2019 - 2024. All rights reserved.