Android 中 MD5 的幾種生成方式(小結(jié))
Java 提供了 MessageDigest 類用來處理消息摘要算法,如 MD5 , SHA-1 和 SHA-256 等。
1. Java 的標(biāo)準(zhǔn)實(shí)現(xiàn)
使用位運(yùn)算進(jìn)行進(jìn)制轉(zhuǎn)換。
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Hash { private static final char[] hexCode = "0123456789ABCDEF".toCharArray(); public static String md5(String input) throws NoSuchAlgorithmException { byte[] bytes = MessageDigest.getInstance("MD5").digest(input.getBytes()); return printHexBinary(bytes); } public static String printHexBinary(byte[] data) { StringBuilder r = new StringBuilder(data.length * 2); for (byte b : data) { r.append(hexCode[(b >> 4) & 0xF]); r.append(hexCode[(b & 0xF)]); } return r.toString(); } }
2. 使用 String.format
使用 String.format 進(jìn)行進(jìn)制轉(zhuǎn)換。
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Hash { public static String md5(String input) throws NoSuchAlgorithmException { byte[] bytes = MessageDigest.getInstance("MD5").digest(input.getBytes()); return printHexBinary(bytes); } public static String printHexBinary(byte[] data) { StringBuilder r = new StringBuilder(data.length * 2); for (byte b : data) { r.append(String.format("%02X", new Integer(b & 0xFF))); } return r.toString(); } }
3. Kotlin 的標(biāo)準(zhǔn)實(shí)現(xiàn)
object Hash { private val HEX_CHARS = "0123456789ABCDEF".toCharArray() fun md5(input: String): String { val bytes = MessageDigest.getInstance("MD5").digest(input.toByteArray()) return printHexBinary(bytes) } fun printHexBinary(data: ByteArray): String { val r = StringBuilder(data.size * 2) data.forEach { b -> val i = b.toInt() r.append(HEX_CHARS[i shr 4 and 0xF]) r.append(HEX_CHARS[i and 0xF]) } return r.toString() } }
4. Kotlin 擴(kuò)展函數(shù)
fun String.md5(): String { val bytes = MessageDigest.getInstance("MD5").digest(this.toByteArray()) return bytes.hex() } fun ByteArray.hex(): String { return joinToString("") { "%02X".format(it) } }
定義完擴(kuò)展函數(shù)后,就可以使用下面的語(yǔ)法來計(jì)算MD5值:
val hash = "foo-bar".md5()
到此這篇關(guān)于Android 中 MD5 的幾種生成方式(小結(jié))的文章就介紹到這了,更多相關(guān)Android MD5生成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Fragment?already?added問題的解決方案
這篇文章主要介紹了關(guān)于Fragment?already?added問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Android視頻播放器屏幕左側(cè)邊隨手指上下滑動(dòng)亮度調(diào)節(jié)功能的原理實(shí)現(xiàn)
這篇文章主要介紹了Android視頻播放器屏幕左側(cè)邊隨手指上下滑動(dòng)亮度調(diào)節(jié)功能的原理實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02android:layout_gravity和android:gravity的區(qū)別
本篇文章主要介紹了android中g(shù)iavity和layout_gravity的區(qū)別。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04Android RecyclerView區(qū)分視圖類型的Divider的實(shí)現(xiàn)
本篇文章主要介紹了Android RecyclerView區(qū)分視圖類型的Divider的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Android Loop機(jī)制中Looper與handler詳細(xì)分析
Handler是Android線程之間的消息機(jī)制,主要的作用是將一個(gè)任務(wù)切換到指定的線程中去執(zhí)行,準(zhǔn)確的說是切換到構(gòu)成Handler的looper所在的線程中去出處理。本文將詳細(xì)介紹Android Handler機(jī)制和Looper Handler Message關(guān)系2022-11-11Android視頻/音頻緩存框架AndroidVideoCache(Okhttp)詳解
這篇文章主要為大家詳細(xì)介紹了Android視頻、音頻緩存框架AndroidVideoCache,實(shí)現(xiàn)邊下邊播功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07android自動(dòng)化測(cè)試知識(shí)點(diǎn)總結(jié)
在本文里小編給大家分享了關(guān)于android自動(dòng)化測(cè)試入門的相關(guān)知識(shí)點(diǎn),需要的朋友們跟著參考下吧。2019-06-06Android獲得設(shè)備狀態(tài)信息、Mac地址、IP地址的方法
今天小編就為大家分享一篇關(guān)于Android獲得設(shè)備狀態(tài)信息、Mac地址、IP地址的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Android自定義View實(shí)現(xiàn)帶數(shù)字的進(jìn)度條實(shí)例代碼
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)帶數(shù)字的進(jìn)度條實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-03-03