记录下MD5加密遇到的坑

摘要:
“);}Stringmd5code=newBigInteger.toString;//十六进制数字//如果生成的数字小于32位,则0 0表示{md5code=“0”+md5code;}应填写在前返回md5code中;}----这种写法会导致一定概率的31位加密消息,无话可说!此时,只有json字符串消息中的双引号可以替换为单引号,才能成功解决问题。有必要判断两个案件。双引号不能替换为单引号,否则单引号也会导致31位加密消息。毕竟,上述加密算法存在问题。“);}}------这将在开头添加一个0,以形成32位加密消息

错误的写法:

public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}

----这种写法会导致 有一定几率出现31位加密报文,坑的无话可说!这时候只能将json字符串报文中的双引号 replace 成单引号 成功解决,需要判断2种情况,双引号不行再换单引号,不然单引号也会出现31位加密报文,坑啊,说到底还是上面的加密算法有问题。

正确的写法:

public static String MD5(String sourceStr) {
try {
// 获得MD5摘要算法的 MessageDigest对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(sourceStr.getBytes());
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
StringBuffer buf = new StringBuffer();
for (int i = 0; i < md.length; i++) {
int tmp = md[i];
if (tmp < 0)
tmp += 256;
if (tmp < 16)
buf.append("0");
buf.append(Integer.toHexString(tmp));
}
// return buf.toString().substring(8, 24);// 16位加密
return buf.toString();// 32位加密
} catch (Exception e) {
throw new RuntimeException("没有md5这个算法!");
}
}

-----这个会在最前面补上一个0,构成32位加密报文

免责声明:文章转载自《记录下MD5加密遇到的坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下SSD缓存加速之bcache使用网站的PV UV IP---网站常见软件性能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

R包的安装 卸载 加载 移除等

R包的安装1)有四个窗口用于使用R studio手动安装R studio,所有安装的R包将显示在右下角窗口中的包下。单击安装-˃输入R包名称-˃单击安装。2) 使用命令安装安装。packagesR包,请卸载删除。packagesR包,加载libraryR包,删除...

git使用说明

初次使用请参考百度,google,博客园。1修改文件并提交到github[luwenwei@dev01v~/git/helww/labs]$vimREADME[luwenwei@dev01v~/git/helww/labs]$gitdiffdiff--gita/READMEb/READMEindex39d8172..464c83f100644---a/REA...

微软新一代输入法框架 TSF

目前,市场上的非微软中文输入法基本上只实现IMM框架。自Windows XP开始以来,Windows提供了一个基于COM的新输入框架TSF。但是,Windows Vista和Windows 7用户也可以使用各种基于IMM的输入方法,因为Windows提供了一个组件来将所有TSF请求转换为IMM API。很可能,因为Win8下的许多Imm函数无法使用。)根据微...

SecureCRT优化调整、永久设置、保护眼睛和配色方案

您可以根据个人喜好调整字体大小。我已经习惯了4号字体。到目前为止,SecureCRT优化已经完成。...

2022年可用QQ机器人框架

4.小李子机器人官网:https://xiaolz.cn评估:支持多个Q登录和论坛似乎是目前最活跃的。它支持许多api,可以满足许多需求。没有限制,但有很多错误。...

easyexcel导出两种方式response返回文件流下载和保存到服务器返回下载链接

1、response方式返回excel文件流@GetMapping("/exportExcel")publicvoidexportExcel(@RequestParam(value="menu")Stringmenu,@RequestParam(value="dwflglId")intdwflglId,@RequestParam(value="qjCode"...