MD5 情報ダイジェスト アルゴリズムの概要
- 広く使用されている暗号化ハッシュ関数である MD5 (メッセージ ダイジェスト アルゴリズム) は、128 ビット (16 バイト) のハッシュ値 (ハッシュ値) を生成して、情報送信の完全性と一貫性を保証します。
- 計算された MD5 値が繰り返される可能性がありますが、その可能性は非常に低いです。
- 暗号化プロセスはほぼ不可逆的であり、衝突クラッキング用に巨大な Key-Value データベースが維持されない限り、ロックを解除することはほぼ不可能です。
- MD5 で暗号化される文字列は固定されており、同じ文字列またはファイルを暗号化しても結果は変わりません。
Android でのコードの実装
- 次のコードは、一般的な 32 ビット md5 計算を実装しています。計算結果は、生成された文字を長さ 32 の 16 進文字列として保持します。これは、開発で必要な場合に直接変換して使用できます。
public class Md5Util { public static String get(String text) { String result = null; try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] digest = md.digest(text.getBytes()); result = toHexString(digest); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } return result; } public static String get(InputStream inputStream) { String result = null; try { byte[] buffer = new byte[8192]; int len; MessageDigest md = MessageDigest.getInstance("MD5"); while ((len = inputStream.read(buffer)) != -1) {//分多次读入文件,占用内存比较少 md.update(buffer, 0, len); } inputStream.close(); byte[] digest = md.digest(); result = toHexString(digest); } catch (Exception ex) { ex.printStackTrace(); if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public static String get(File file) { String result = null; try { result = get(new FileInputStream(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } return result; } private static String toHexString(byte[] digest) { StringBuilder sb = new StringBuilder(); String hexStr; for (byte b : digest) { hexStr = Integer.toHexString(b & 0xFF);//& 0xFF处理负数 if (hexStr.length() == 1) {//长度等于1,前面进行补0,保证最后的字符串长度为32 hexStr = "0" + hexStr; } sb.append(hexStr); } return sb.toString(); } }