最新回答 / 宋兆恒
前端后端都是应该要加密的,前端可以发送一个hidden域的加密后的password到后台,后台再对这段数据进行再次加密的处理,两端的加密算法不一样,由双方自己掌握,但是明文密码按规矩是不可以直接传输的。不要传输明文密码。 实际上你传过来到后台的数据。在我后台看来就是密码,我后台会对这段字符再次进行加密,数据库中会储存我加密后的密码值。校验的时候,从数据库取出加密后的密码,并获取前端传输过来的字符串,用相应的算法对两者进行比对就可以了。
2019-04-19
最赞回答 / 水不要鱼_
你有没有发现MD5 加密之后的长度是一样的,不管原本的信息有多长?这是因为 MD5 是摘要算法,有点类似于从你要加密的信息中选取一部分信息出来加密,所以即使你得到了 MD5 加密之后的结果,也很难从一部分信息中反推出原本的完整信息。另外,MD5 也是存在被破解的情况,那就是最传统的破解方法,从一堆数据中一个个去试。所以, MD5 可以设置一个盐值,类似于干扰信息,可以降低被破解的概率。
2018-05-30
最新回答 / 蝶梦疏妄
可能是转义的时候出的问题因为我 public static void bcHmacMD5() { HMac hmac = new HMac(new MD5Digest()); hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode(""))); hmac.update(src.getBytes(), 0, src.getBytes().length); // ...
2017-07-01
最新回答 / taoy
一个byte是八比特,new String时按照byte的值到字符表中找对应的字符来生成字符串。Hex.byteArrayToString是把一个byte变成两个十六进制的英文与数字组合,内容当然就不会一样。
2017-04-10
最赞回答 / 宋兆恒
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。
2017-03-02
最赞回答 / 明日之春
这个是因为DigestUtils.sha1Hex(src)中是默认使用UTF-8的编码格式来获取字节数组的,而DigestUtils.sha1Hex(src.getBytes())是用系统默认的编码格式来获取字节数组的,不一定是UTF-8。由于字节数组不同,所以结果也不同所以DigestUtils.sha1Hex(src)应该等于DigestUtils.sha1Hex(src.getBytes("UTF-8"))
2016-10-27