专栏首页恩蓝脚本Android 中 MD5 的几种生成方式(小结)

Android 中 MD5 的几种生成方式(小结)

Java 提供了MessageDigest 类用来处理消息摘要算法,如MD5 ,SHA-1 和SHA-256 等。

1. Java 的标准实现

使用位运算进行进制转换。

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 进行进制转换。

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 的标准实现

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 扩展函数

fun String.md5(): String {
  val bytes = MessageDigest.getInstance("MD5").digest(this.toByteArray())
  return bytes.hex()
}

fun ByteArray.hex(): String {
  return joinToString("") { "%02X".format(it) }
}

定义完扩展函数后,就可以使用下面的语法来计算MD5值:

val hash = "foo-bar".md5()

到此这篇关于Android 中 MD5 的几种生成方式(小结)的文章就介绍到这了,更多相关Android MD5生成内容请搜索ZaLou.Cn

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php DES加密算法实例分析

    由于PHP使用mcrypt扩展进行3DES加密,填充模式是跟JAVA以及.NET是不一样的,JAVA和.NET填充模式使用的是PKCS7。

    砸漏
  • Python-openCV开运算实例

    开运算和闭运算就是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先开后闭并不能得到原先的图像。

    砸漏
  • Android 中利用 ksoap2 调用 WebService的示例代码

    去年刚刚工作的时候,第一个项目是要访问 WebService。由于没有接触过,查了很多资料,在别人代码的基础上稍微修改了一下,总算满足了自己的需求。最近整理电脑...

    砸漏
  • RabbitMQ入门-高效的Work模式

    扛不住的Hello World模式 上篇《RabbitMQ入门-从HelloWorld开始》介绍了RabbitMQ中最基本的Hello World模型。正如其名...

    JackieZheng
  • 故障分析 | 同一条 SQL 为何在 MariaDB 正常,MySQL 5.7 却很慢?

    爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。

    爱可生开源社区
  • Silverlight中的帧

    Silverlight是基于时间线的,不象Flash是基于帧的,所以在Silverlight中,很少看到有文档专门介绍SL中的帧。 但是我们从动画原理知道,动画...

    菩提树下的杨过
  • 无线网络嗅探中的Radiotap

    引言 在WLAN无线网络抓包的时候不管是用wireshark、tcpdump还是scapy都会出现Radiotap、LLC、SNAP协议层。 如图所示: ? L...

    FB客服
  • Linux 命令利用scp实现从服务器共享地址上传下载文件、文件夹实例演示,scp命令的参数详解

    传文件的话,不用参数 -r,文件夹用参数 -r 语法:scp [可选参数] 原地址 目的地址 我下面演示的是传文件:

    小蓝枣
  • 物种多度的非约束排序中被动添加环境变量概述

    前篇先后简介了主成分分析(PCA)、对应分析(CA)、主坐标分析(PCoA)以及非度量多维尺度分析(NMDS)。这些排序方法均属于非约束排序,只涉及一个数据矩阵...

    用户7585161
  • java之hibernate之helloworld

    2.增加一个lib文件夹,并把 hibernate必须的jar包 和 数据库驱动包 一起复制进去

    Vincent-yuan

扫码关注云+社区

领取腾讯云代金券