jsa*_*ire 6 java sha256 node.js kotlin
我在两个不同的模块中使用 SHA 256 哈希生成器。一个模块是用 Kotlin 编写的,另一个模块使用 Nodejs 加密 API 编写。Nodejs 和 kotlin 中的哈希值略有不同。
Kotlin 代码
import java.security.MessageDigest
import java.util.Base64
fun main() {
val md = MessageDigest.getInstance("SHA-256")
val input = "test".toByteArray(Charsets.UTF_8)
val bytes = md.digest(input)
println(Base64.getUrlEncoder().encodeToString(bytes))
}
Run Code Online (Sandbox Code Playgroud)
Nodejs代码
const crypto = require('crypto');
const hash = crypto.createHash('sha256');
hash.update('test');
console.log(crypto.createHash('sha256').update('test', 'utf8').digest('base64'));
Run Code Online (Sandbox Code Playgroud)
kotlin 代码输出n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg=where ,而 Nodejs 代码输出n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=。我无法确定我做错了什么?
我相信您的问题是由 kotlin: 提供的 urlencoded base64 引起的Base64.getUrlEncoder()。
在 kotlin 中,您将获得 Base64 编码的 url,而在 Node 中,您只能获得 Base64。
也许这可以帮助您确定假设是否正确。在节点处添加url编码:
// https://www.npmjs.com/package/base64url
const base64url = require('base64url');
console.log(base64url(crypto.createHash('sha256').update('test', 'utf8')));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5983 次 |
| 最近记录: |