java与nodejs使用SHA加密获得结果不同解决方法
需求:
最近需要完成一个加密的功能,客户给的加密示例是java的,而公司使用的是nodejs。因此需要需要将java加密方式迁移到nodejs
java加密方式是SHA。客户给的java代码如下:
package example;
import java.security.MessageDigest;public class Test {public static void main(String[] args) {System.out.println(encodePassword("12345")); ;}private static String encodePassword(String password) {byte[] unencodedPassword = password.getBytes();MessageDigest md = null;try {md = MessageDigest.getInstance("sha");} catch (Exception e) {e.printStackTrace();return password;}md.reset();md.update(unencodedPassword);byte[] encodedPassword = md.digest();StringBuffer buf = new StringBuffer();for (int i = 0; i < encodedPassword.length; i++) {if ((encodedPassword[i] & 0xff) < 0x10) {buf.append("0");}buf.append(Long.toString(encodedPassword[i] & 0xff, 16));}return buf.toString();}}
如上面的示例对“12345”进行加密后获得加密后的结果:
8cb2237d0679ca88db6464eac60da96345513964
使用nodejs实现sha加密代码如下:
function getSHA(str){var obj=crypto.createHash('sha');//与java的SHA加密方式生成的密钥相同obj.update(str);str=obj.digest('hex');//hex是十六进制console.log(str);return str;
}
getSHA("12345");
获得加密结果为:
f7e507be49c187214406fd2556302ba47d535780
对比两个加密结果发现,虽然加密算法是相同的,但是加密结果却不同,百度一下,也没有有用的解决办法,有说是byte的问题,有说的字符utf-8的问题。
偶然的一次尝试,将nodejs的加密方式由sha修改为sha1获得的加密结果竟然神奇的一样了。
打印nodejs支持的所有加密方式代码如下:
function outputAll(){var crypto = require('crypto'); //加载crypto库console.log("--"+crypto.getHashes()); //打印支持的hash算法
}
outputAll();
执行代码返回结果:
DSA,DSA-SHA,DSA-SHA1,DSA-SHA1-old,RSA-MD4,RSA-MD5,
RSA-MDC2,RSA-RIPEMD160,RSA-SHA,RSA-SHA1,RSA-SHA1-2,RSA-SHA224,RSA-SHA256,RSA-SHA384,RSA-SHA512,dsaEncryption,dsaWithSHA,
dsaWithSHA1,dss1,ecdsa-with-SHA1,md4,md4WithRSAEncryption,md5,
md5WithRSAEncryption,mdc2,mdc2WithRSA,ripemd,ripemd160,ripemd160WithRSA,rmd160,
sha,sha1,sha1WithRSAEncryption,sha224,sha224WithRSAEncryption,sha256,sha256WithRSAEncryption,sha384,sha384WithRSAEncryption,sha512,sha512WithRSAEncryption,shaWithRSAEncryption,ssl2-md5,ssl3-md5,ssl3-sha1,whirlpool
由返回结果可以看出对nodejs来说,sha和sha1是两个不同的加密算法,而对于java来说使用sha和sha1是相同的加密算法
总结:由此可以看出java的sha加密算法,对应的应该是nodejs的sha1加密算法。
后记:网上查找资料发现java支持的加密算法为,MessageDigest可使用的加密方法有MD2\MD5\SHA-1\SHA-256\SHA-384\SHA-51
所以,SHA加密算法,其实应该是SHA-1加密,而nodejs的sha和sha1是不同的加密算法。
java与nodejs使用SHA加密获得结果不同解决方法相关推荐
- [ JAVA编程 ] double类型计算精度丢失问题及解决方法
[ JAVA编程 ] double类型计算精度丢失问题及解决方法 参考文章: (1)[ JAVA编程 ] double类型计算精度丢失问题及解决方法 (2)https://www.cnblogs.co ...
- tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法 参考文章: (1)tomcat运行时候出现java ...
- java.lang.IllegalArgumentException: Request header is too large的解决方法
java.lang.IllegalArgumentException: Request header is too large的解决方法 参考文章: (1)java.lang.IllegalArgum ...
- npm突然找不到D:\nodejs\node_modules\npm\bin\npm-cli.js的解决方法
npm突然找不到D:\nodejs\node_modules\npm\bin\npm-cli.js的解决方法 参考文章: (1)npm突然找不到D:\nodejs\node_modules\npm\b ...
- java应用 cpu占用过高问题分析及解决方法
主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下. 使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3 ...
- Eclipse Java Oxygen不能创建动态的web项目(解决方法)
Eclipse Java Oxygen不能创建动态的web项目(解决方法) 一.eclipse安装J2EE插件 一.eclipse安装J2EE插件 Oxygen版本Eclipse没有toamct开发工 ...
- 金蝶软件打开显示加密服务器,金蝶k/3加密服务未启动解决方法
金蝶k/3加密服务未启动解决方法 k3加密服务未启动解决方法 K/3V10.3(包括K/3V10.2SP2的加密补丁),对加密的验证方式做了修改,增加了一项加密服务,大大提高了加密服务的稳定性,当登录 ...
- IDEA java类文件左下角出现红色的J标识,解决方法
IDEA java类文件左下角出现红色的J标识,解决方法 解决方法: 引自:https://blog.csdn.net/lisulong1/article/details/81060385
- 关于java.lang.Exception:No tests found matching的一系列解决方法
关于java.lang.Exception:No tests found matching的一系列解决方法 run junit时出现 No test found matching 解决方法 run j ...
- 金蝶显示加密服务器未启动,金蝶k/3加密服务未启动解决方法
金蝶k/3加密服务未启动解决方法 2018-09-17 金蝶二次开发 2010-11-04 16:26:03 阅读52 评论0 字号:大中小 金蝶k/3加密服务未启动解决方法 k3加密服务未启动解 ...
最新文章
- linux线程函数大全
- blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法
- STM32、Cortex-M3和ARMv8-M之间的关联
- 计算机出现假桌面怎么解决办法,win10系统apphangxprocb1引起桌面假死怎么解决【图文】...
- 记录一则数据库连接故障ORA-12560,ORA-12518
- 【英语学习】【WOTD】thole 释义/词源/示例
- 空间换时间--程序策略
- TF2—tf.keras.layers.BatchNormalization
- 写代码会用到哪些常用的软件
- 普林斯顿微积分读本篇十二:洛必达法则
- 2018中国双态运维用户大会于1月13日在京举行
- HTML+JS 实现下载图片到本地
- 印度十大最好电影排行
- Excel的DATEDIF函数及其用法实例——求日期之间的间隔
- python qt是什么_初识Python与Qt
- 【05月22日】预分红股息率最高排名
- google之Thumbnails图片等比压缩,保持图片清晰
- JAVA集合和字符串互转
- “x经济”的2021:Z世代成价值载体,增量发掘与存量博弈共存
- 西哈努克之子柬埔寨国王西哈莫尼抵京-西哈努克-国王-抵京
热门文章
- gitlab CI CD
- Git详细教程(三):window系统下,使用Git Gui管理项目
- http: s18.me/ios.html,Public Key Infrastructure Configuration Guide, Cisco IOS XE Release 3S
- Flips测试类(page43)
- 计算机中文件的分类,如何有效对电脑文件夹进行分类?
- 刷卡机显示服务器连接失败,pos密码错误_POS机常见故障代码解释
- POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
- 002HTML常用标签
- 电阻触摸屏 linux 校准软件,android 电阻单点触摸屏校准
- MSM8953 Android9.0 配置USB2.0 Camera