初识MD5
来源:互联网 发布:网络著作权侵权行为 编辑:程序博客网 时间:2024/06/15 04:29
MD5——(Nice to meet U)
最近在项目中需要用到MD5进行对密码加密,所以再找资料的同时记下这篇不完美的笔记,以供自己日后整理复习使用。
注:本文以java为基础展开讨论,未经允许不得转载~转载请注明出处
- MD5Nice to meet U
- what is the MD5
- How to 使用
- Tips
what is the MD5?
MD5的全称是Message-Digest Algorithm 5即 *信息-摘要算法* 其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改进而来的一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1。
How to 使用?
/**利用MD5进行加密 * @param originString待加密的字符串 * @return result加密后的字符串 * @throws NoSuchAlgorithmException 没有这种产生消息摘要的算法 * @throws UnsupportedEncodingException */public class Md5 { public static String getEncryption(String originString) throws UnsupportedEncodingException { String result = ""; if (originString != null) { try { // 加密方式为MD5 MessageDigest md = MessageDigest.getInstance("MD5"); // 进行加密运算 byte bytes[] = md.digest(originString.getBytes("UTF-8")); for (int i = 0; i < bytes.length; i++) { // 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位 String str = Integer.toHexString(bytes[i] & 0xFF); result += str; } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } return result; }}
Tips:
代码中这句需要说明一下:
String str = Integer.toHexString(bytes[i] & 0xFF);
上面是将byte[]转化十六进制的字符串,注意这里bytes[i] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串。
b[ i ] & 0xFF运算后得出的是个int,也就是说8位的byte变成32位的int采用了二进制的如果不和0xFF进行与运算,则会自动补位,从而导致数据无我们想要的不一致。
具体的可参考 怎么用Integer.toHexString(int)得到byte类型的十六进制字符串形式顺便巩固一下大学数字电路知识。
阅读全文
0 0
- 初识MD5
- 初识MD5
- 初识MD5算法
- 哈希表,哈希算法,MD5加密算法初识
- md5
- MD5
- MD5
- MD5
- MD5
- MD5
- MD5
- MD5
- md5
- MD5
- MD5
- MD5
- MD5
- MD5
- Ubuntu 16.04 数据库的卸载和安装
- shell变量
- python核心编程笔记chapter1
- 98DX3236交换机PCB阻抗线计算
- java.lang.SecurityException: JCE cannot authenticate the provider BC
- 初识MD5
- VPP API注册回调函数--待完成
- 三级模式两级映像/数据库系统结构
- zookeeper 3.4.6启动抛出 Invalid arguments, exiting abnormally java.lang.NumberFormatException 异常
- Git使用流程
- 我的
- select 动态填充option选项及获取选择的值或者所有值
- 03-VTK基础概念(1)
- java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind