我疯了吗?这是我的"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 pad,否则就是匹配
scala> Base64.getEncoder.encodeToString("foo,bar,etc".getBytes(Charset.forName("UTF-8")))
res6: String = Zm9vLGJhcixldGM=
$ openssl enc -base64 <<< "foo,bar,etc"
Zm9vLGJhcixldGMK
答案 0 :(得分:3)
那是因为shell在<<< foo
的末尾添加了换行符,因此openssl看到的字符串不仅仅是&#34; foo&#34;而是&#34; foo \ n& #34;
尝试echo -n foo | openssl dgst -binary -sha1 | base64
答案 1 :(得分:0)
我必须回答一个多余的答案,因为我带着同样的问题来到这里,而我的业力小于15。迪马是现成的
echo test|openssl dgst -md4
(stdin)= 36d729ab4ff7260da6fb010ef5747bb3
echo -n test|openssl dgst -md4
(stdin)= db346d691d7acc4dc2625db19f9e3f52
第二个结果也确认了充气城堡。在此响应时,有一个带有md4选项的在线摘要检查器,它也同意第二个结果。