簡體   English   中英

這是什么類型的散列/加密?

[英]What kind of hashing / encryption is this?

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;
   }

如果我的 text = "test" The First Part toString()) 產生一個值 "Encryption$2@6966b26b" 然后第二部分得到這個值並產生一個值 "914310720570332111152022222781313839180246" 但是為什么不是 md31a5c5c54d7d7d7f7d7d7相似的東西?

函數“encrypt()”返回一個 MD5 哈希值。 您應該將其重命名為“散列”,因為散列!= 加密。 如果你想加密一個字符串,你可以看這里: https : //gist.github.com/bricef/2436364

我會說 MD5 哈希,因為代碼說MessageDigest.getInstance("MD5") :D

它在代碼中明確說明你正在使用 MD5 哈希算法

現在你的問題是為什么:

但是為什么 md5 是一個數字而不是 31f521a06d5060d1f38159c74a1f7cf2 或類似的東西?

您的答案很簡單,請查看從字節數組生成字符串的代碼。

  byte b = bytes[i];
  sb.append(0xFF & b);

你取字節,即 0x20 然后你用整數 0x255 執行邏輯和運算,然后你添加結果的十進制表示你的 StringBuilder。 你想做的更像是

sb.append(Integer.toHexString(0xff&b));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM