公司网站非响应式模板,不用服务器怎么做网站,河南宣传片制作公司,杭州seo价格废话背景#xff1a;
跟别人集成免密登录#xff0c;用到了MD5加密#xff0c;做好的数据偶尔行#xff0c;偶尔不行#xff0c;深刻怀疑别人代码有问题。#xff08;从不怀疑自己#xff09;#xff0c;理直气壮的找了别个对接人好几次。最后发现自己做的MD5位数不对…废话背景
跟别人集成免密登录用到了MD5加密做好的数据偶尔行偶尔不行深刻怀疑别人代码有问题。从不怀疑自己理直气壮的找了别个对接人好几次。最后发现自己做的MD5位数不对丢了数据。尴尬啊只好悄悄的说可以了不解释不道歉
正文
自己写的MD5加密网上找到copy来的。 /*** md5加密返回32位小写的结果* param data 需要加密的数据* return 32位小写的结果*/public static String encrypt(String data) throws NoSuchAlgorithmException {MessageDigest messageDigest MessageDigest.getInstance(MD5);StringBuilder result new StringBuilder(32);byte[] digest messageDigest.digest(data.getBytes());for (byte b : digest) {result.append(Integer.toHexString(b 0xff));}return result.toString();}
加密内容拼的时间戳和UUID非常容易复现丢失精度的数据。
正确的md5用法
import org.apache.commons.codec.digest.DigestUtils;DigestUtils.md5Hex(md5String);
没错用现成的舒服。也可以用hutool的工具类来做也舒服。 问题分析
主要问题是这里不对 for (byte b : digest) {result.append(Integer.toHexString(b 0xff));}
可以使用
return Hex.encodeHexString(digest);
来替换这个for循环就能解决问题了。
原因十进制转换成为16进制的时候个位数在转换时只保留一位没有补一个0导致的。