这是什么样的哈希/加密?

时间:2017-02-13 09:18:17

标签: java encryption hash

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或类似的东西?

3 个答案:

答案 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));