需求:
最近需要完成一个加密的功能,客户给的加密示例是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加密获得结果不同解决方法相关推荐

  1. [ JAVA编程 ] double类型计算精度丢失问题及解决方法

    [ JAVA编程 ] double类型计算精度丢失问题及解决方法 参考文章: (1)[ JAVA编程 ] double类型计算精度丢失问题及解决方法 (2)https://www.cnblogs.co ...

  2. tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法

    tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法 参考文章: (1)tomcat运行时候出现java ...

  3. java.lang.IllegalArgumentException: Request header is too large的解决方法

    java.lang.IllegalArgumentException: Request header is too large的解决方法 参考文章: (1)java.lang.IllegalArgum ...

  4. 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 ...

  5. java应用 cpu占用过高问题分析及解决方法

    主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下. 使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3 ...

  6. Eclipse Java Oxygen不能创建动态的web项目(解决方法)

    Eclipse Java Oxygen不能创建动态的web项目(解决方法) 一.eclipse安装J2EE插件 一.eclipse安装J2EE插件 Oxygen版本Eclipse没有toamct开发工 ...

  7. 金蝶软件打开显示加密服务器,金蝶k/3加密服务未启动解决方法

    金蝶k/3加密服务未启动解决方法 k3加密服务未启动解决方法 K/3V10.3(包括K/3V10.2SP2的加密补丁),对加密的验证方式做了修改,增加了一项加密服务,大大提高了加密服务的稳定性,当登录 ...

  8. IDEA java类文件左下角出现红色的J标识,解决方法

    IDEA java类文件左下角出现红色的J标识,解决方法 解决方法: 引自:https://blog.csdn.net/lisulong1/article/details/81060385

  9. 关于java.lang.Exception:No tests found matching的一系列解决方法

    关于java.lang.Exception:No tests found matching的一系列解决方法 run junit时出现 No test found matching 解决方法 run j ...

  10. 金蝶显示加密服务器未启动,金蝶k/3加密服务未启动解决方法

    金蝶k/3加密服务未启动解决方法 2018-09-17 金蝶二次开发 2010-11-04 16:26:03 阅读52 评论0   字号:大中小 金蝶k/3加密服务未启动解决方法 k3加密服务未启动解 ...

最新文章

  1. linux线程函数大全
  2. blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法
  3. STM32、Cortex-M3和ARMv8-M之间的关联
  4. 计算机出现假桌面怎么解决办法,win10系统apphangxprocb1引起桌面假死怎么解决【图文】...
  5. 记录一则数据库连接故障ORA-12560,ORA-12518
  6. 【英语学习】【WOTD】thole 释义/词源/示例
  7. 空间换时间--程序策略
  8. TF2—tf.keras.layers.BatchNormalization
  9. 写代码会用到哪些常用的软件
  10. 普林斯顿微积分读本篇十二:洛必达法则
  11. 2018中国双态运维用户大会于1月13日在京举行
  12. HTML+JS 实现下载图片到本地
  13. 印度十大最好电影排行
  14. Excel的DATEDIF函数及其用法实例——求日期之间的间隔
  15. python qt是什么_初识Python与Qt
  16. 【05月22日】预分红股息率最高排名
  17. google之Thumbnails图片等比压缩,保持图片清晰
  18. JAVA集合和字符串互转
  19. “x经济”的2021:Z世代成价值载体,增量发掘与存量博弈共存
  20. 西哈努克之子柬埔寨国王西哈莫尼抵京-西哈努克-国王-抵京

热门文章

  1. gitlab CI CD
  2. Git详细教程(三):window系统下,使用Git Gui管理项目
  3. http: s18.me/ios.html,Public Key Infrastructure Configuration Guide, Cisco IOS XE Release 3S
  4. Flips测试类(page43)
  5. 计算机中文件的分类,如何有效对电脑文件夹进行分类?
  6. 刷卡机显示服务器连接失败,pos密码错误_POS机常见故障代码解释
  7. POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
  8. 002HTML常用标签
  9. 电阻触摸屏 linux 校准软件,android 电阻单点触摸屏校准
  10. MSM8953 Android9.0 配置USB2.0 Camera