首页 > 解决方案 > nodejs和kotlin中的SHA256不同哈希

问题描述

我在两个不同的模块中使用 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))
}

节点代码

const crypto = require('crypto');
const hash = crypto.createHash('sha256');

hash.update('test');
console.log(crypto.createHash('sha256').update('test', 'utf8').digest('base64'));

kotlin 代码输出n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg=where 作为 nodejs 代码输出n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=。我无法确定我做错了什么?

标签: javanode.jskotlinsha256

解决方案


我相信您的问题是由 kotlin: 提供的 urlencoded base64 引起的Base64.getUrlEncoder()

在 kotlin 中,您得到的是 base64 url​​ 编码,而在节点上,您只有 base64。

也许这可以帮助您确定假设是否正确。在节点添加 url 编码:

// https://www.npmjs.com/package/base64url


const base64url = require('base64url');
console.log(base64url(crypto.createHash('sha256').update('test', 'utf8')));

推荐阅读