这是什么样的散列/加密?
private String getString(byte[] bytes)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++)
{
byte b = bytes[i];
sb.append(0xFF & b);
}
return sb.toString();
}
public String encrypt(String source)
{
try
{
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(source.getBytes());
return getString(bytes);
}
catch (Exception e)
{
e.printStackTrace(); }
return null;
}
如果我的文字=“测试” 第一部分的toString())生产的“加密$ -2 @ 6966b26b” 的值,而第二部分则获取和产生的“91431072057033211115202222781313839180246” 值,但为什么md5的数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西?这是什么样的散列/加密?
它在代码中明确提出昱欧使用MD5哈希算法
现在你的问题是,为什么:
但是为什么md5的数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西?
你的回答很简单,看看你的字节数组产生你的字符串的代码。
byte b = bytes[i];
sb.append(0xFF & b);
你把字节,即0x20的,那么你进行逻辑和操作整数0x255然后添加导致哟你的StringBuilder的十进制表示。 你想要做的更像是
sb.append(Integer.toHexString(0xff&b));
任何方式将原始转换为HexString? – NoHacksJustCoCo
我要说的MD5哈希值,因为代码说MessageDigest.getInstance("MD5")
:d
但为什么是md5的数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西? – NoHacksJustCoCo
功能 “加密()” 返回一个MD5哈希值。您应该将其重命名为“散列”,因为散列!=加密。 如果要加密的字符串,你可以看看这里:https://gist.github.com/bricef/2436364
但为什么是md5的数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西? – NoHacksJustCoCo
我发现这个:[MD5摘要](http://www.*.com/questions/5470219/get-md5-string-from-message-digest) –
它字面意思是MD5代码... –
的数字呈现,是因为你得到的字节数回。如果你想以十六进制表示,像31f521a06d5060d1f38159c74a1f7cf2你需要将你的字节转换为16基地。所以介于00-ff之间的值。 –