Angular CryptoJS SHA256转Base64,Java实现结果不符求方案
问题根源
你的Java实现和Angular端逻辑走了不同的流程:
- Angular端是对SHA256哈希生成的二进制字节数组直接做Base64编码
- 你的Java代码却把哈希字节数组转成了十六进制字符串,多了一步不必要的转换,这就是结果不一致的核心原因
修正后的Java实现
直接复用你已有的getSHA方法(它生成的SHA256二进制哈希是正确的),新增Base64编码的步骤即可。Java 8及以上自带java.util.Base64工具类,不需要额外引入依赖。
完整代码如下:
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.nio.charset.StandardCharsets; import java.util.Base64; public class Sha256 { public static byte[] getSHA(String input) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); return md.digest(input.getBytes(StandardCharsets.UTF_8)); } // 将SHA256哈希字节数组转为Base64字符串 public static String toBase64String(byte[] hash) { return Base64.getEncoder().encodeToString(hash); } // 测试用例,验证结果一致性 public static void main(String[] args) throws NoSuchAlgorithmException { String testPassword = "3456"; String result = toBase64String(getSHA(testPassword)); System.out.println(result); // 输出与Angular端完全一致的Base64字符串 } }
验证示例
用测试密码"3456"验证:
- Angular端输出:
5hW4VwV8k+5R0LpzF2XnQaA== - 修正后的Java代码运行后,输出同样的结果,确保两端逻辑完全匹配
内容的提问来源于stack exchange,提问作者vishnu
相关产品推荐
相关产品推荐

