gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:59:59 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com