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;
}
如果我的文字=&#34;测试&#34; 第一部分toString())产生的值为#34;加密$ 2 @ 6966b26b&#34; 然后第二部分得到它并产生&#34; 91431072057033211115202222781313839180246&#34; 但是为什么md5是一个数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西?
答案 0 :(得分:1)
函数“encrypt()”返回MD5哈希值。您应该将其重命名为“hash”,因为hashing!= encrypting。 如果要加密字符串,可以在此处查看:https://gist.github.com/bricef/2436364
答案 1 :(得分:0)
我会说MD5哈希,因为代码说 <?php $author = get_the_author(); ?>
:D
答案 2 :(得分:0)
在代码中清楚地说明了你使用的是MD5哈希算法
现在你的问题是:
但为什么md5是一个数字而不是31f521a06d5060d1f38159c74a1f7cf2或类似的东西?
您的答案很简单,请查看从您的字节数组生成字符串的代码。
byte b = bytes[i];
sb.append(0xFF & b);
你取字节,即0x20,然后用整数0x255执行逻辑和操作,然后在你的StringBuilder中添加结果的十进制表示。 你想做的更像是
sb.append(Integer.toHexString(0xff&b));