- 浏览: 458453 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
syw19901001:
30多条mysql数据库优化方法,千万级数据库记录查询轻松解决 ...
MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析 -
gaoyuanyuan121:
直接改成root.war,根路径能访问,项目路径也能访问,赞 ...
jetty 中如何设置root app -
freezingsky:
翻出来,再看一次!
AOP 的简单入门 -
Shen.Yiyang:
inter12 写道Shen.Yiyang 写道我说的不是NI ...
ReentrantLock、sync、ReentrantReadWriteLock性能比较 -
inter12:
Shen.Yiyang 写道我说的不是NIO和BIO的区别,而 ...
ReentrantLock、sync、ReentrantReadWriteLock性能比较
java.security.MessageDigest简介:
常用场景:
一般我们数据库登录时,需要对用户的密码进行加密操作,不直接将原密码保存到数据库中,用户登录时候也是采用加密算法进行比较
本案只介绍使用java.security.MessageDigest,对数据进行加密操作。该方法是单向的加密算法
详细代码如下所表示:
//基本的公用类
//对数据进行加密的方法:
//对数据进行base64转发,有可能某些byte是不可打印的字符。
存在几种处理方式,
方式一:转化为base64
//将byte转化为16进制
有两种方式转化为16进制
第一种:
第二种:
最后将Byte数组转化为String保存到DB中
比较两个加密byte数组是否相同
测试函数
结果:
baseResult:+HwBij+rZkL3Ihsxx2xFsA==
hexResult:F87C018A3FAB6642F7221B31C76C45B0
常用场景:
一般我们数据库登录时,需要对用户的密码进行加密操作,不直接将原密码保存到数据库中,用户登录时候也是采用加密算法进行比较
本案只介绍使用java.security.MessageDigest,对数据进行加密操作。该方法是单向的加密算法
详细代码如下所表示:
//基本的公用类
package com.xue.security; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SecurityTest { // MD5是16位,SHA是20位(这是两种报文摘要的算法) 定义两种加密算法的类 private static final String MD5_ALGORITHM = "MD5"; private static final String SHA_1_ALGORITHM = "SHA-1"; /** 十六进制 */ private static final int HEX_NUM = 16; /** 十六进制码 */ private static final String[] HEX_DIGITS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; }
//对数据进行加密的方法:
/**对语句进行单向加密 * <功能详细描述> * @param message 需要加密的信息 * @return * @throws NoSuchAlgorithmException * @throws IOException [参数说明] * * @return byte[] [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public byte[] encrypt(String message) throws NoSuchAlgorithmException, IOException { // 加密 MessageDigest encrypt = MessageDigest.getInstance(SecurityTest.MD5_ALGORITHM); // 添加需要加密的信息 encrypt.update(message.getBytes()); // 对信息信息加密 byte[] encryptMD5 = encrypt.digest(); //获得加密算法 System.out.println(encrypt.getAlgorithm()); //得到加密算法的长度 System.out.println(encrypt.getDigestLength()); return encryptMD5; }
//对数据进行base64转发,有可能某些byte是不可打印的字符。
存在几种处理方式,
方式一:转化为base64
/** 将数据转化为BASE64码进行保存 * <功能详细描述> * @param encryptMD5 * @return [参数说明] * * @return String [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public String transform(byte[] encryptMD5) { //对数据进行base64转发,有可能某些byte是不可打印的字符。 BASE64Encoder basEncoder = new BASE64Encoder(); return basEncoder.encode(encryptMD5); }
//将byte转化为16进制
有两种方式转化为16进制
第一种:
/** * 转化方式二 * 2进制转16进制方式二 <功能详细描述> * * @param b * @return [参数说明] * * @return String [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) { hs = hs + "0" + stmp; } else { hs = hs + stmp; } } return hs.toUpperCase(); }
第二种:
/** * 转化方式二 * 将数据转化为16进制进行保存,因为有些byte是不能打印的字符 字节数组的转化 * * @param b 字节数组 * @return [参数说明] * * @return String [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public static String byteArrayToHexString(byte[] b) { StringBuffer result = new StringBuffer(128); for (int i = 0; i < b.length; i++) { result.append(byteToHexString(b[i])); } return result.toString(); } /** * 转化方式二 * 将数据转化为16进制进行保存,因为有些byte是不能打印的字符 单字节转化 * * @param b * @return [参数说明] * * @return String [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public static String byteToHexString(byte b) { int n = b; if (0 > n) { n = 256 + n; } int d1 = n / HEX_NUM; int d2 = n % HEX_NUM; return HEX_DIGITS[d1] + HEX_DIGITS[d2]; }
最后将Byte数组转化为String保存到DB中
比较两个加密byte数组是否相同
/** 将数据转化为BASE64码进行保存 * <功能详细描述> * @param encryptMD5 * @return [参数说明] * * @return String [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public String transform(byte[] encryptMD5) { //对数据进行base64转发,有可能某些byte是不可打印的字符。 BASE64Encoder basEncoder = new BASE64Encoder(); return basEncoder.encode(encryptMD5); }
测试函数
public static void main(String[] args) throws NoSuchAlgorithmException, IOException { SecurityTest t = new SecurityTest(); //得到加密数组 byte[] data = t.encrypt("我的测试信息!"); //转化为字符串,采用base编码方式 String baseResult = SecurityTest.transform(data); String hexResult = SecurityTest.byte2hex(data); System.out.println("baseResult"+baseResult); System.out.println("hexResult"+hexResult); }
结果:
baseResult:+HwBij+rZkL3Ihsxx2xFsA==
hexResult:F87C018A3FAB6642F7221B31C76C45B0
发表评论
-
if语句的写法之普通,文艺,2B青年写法
2011-12-08 21:21 1936最近这段时间在处理一个项目迁移,结果有大量的时间在写迁移代码。 ... -
Java.lang.reflect 包下常用的类及方法简介
2011-12-01 18:50 4127Class类之主要方法简介 Class<?&g ... -
Collections.EMPTY_LIST和Collections.emptyList()简单使用体会
2011-04-29 10:57 50971.背景 在某些情况下, ... -
JAVA SAX解析
2010-09-17 15:29 3906java sax 解析 JAVA 解析 XML 通常有两种方 ... -
多线程笔记--2
2010-07-30 17:19 107511, 在没有同步的情况下 , 编译器与处理器运行时的指令执行 ... -
JDK学习--java.util.concurrent.ConcurrentMap输出及输入
2010-07-30 17:14 2623新的 java.util.concurrent.Concurr ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:12 997PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:11 1177PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:10 2056Tiger提供的 java.util.concurrent 包 ... -
socket基本通信
2010-07-28 22:33 31821.服务端 while(true){ ... -
java.util.zip
2010-07-19 16:49 1350主要是三个类: ZipOutputStream ... -
java.util.LinkedHashMap (2)
2010-07-19 16:43 1353step 1:建立对象。采用最少访问次数排序。 ... -
java.util.LinkedHashMap (1)
2010-07-19 16:42 3042LinkedHashMap :具有可预知的迭代顺序。区别与Ha ... -
java比较器的两种实现
2010-07-19 14:48 18151 实现一个Comparator 接口 public cl ... -
java.util.IdentityHashMap
2010-07-19 14:47 1705Map<Object, String> map = ... -
java.util.Arrays
2010-07-19 14:47 1297一些基本常用的方法: 一. 数组中的查找: ... -
apache 处理目录
2010-07-19 10:22 985private static class MyWalk ... -
一些core java知识
2010-07-19 10:05 10711. 对于url中需要转化的# %符号,可以采用base64编 ... -
xstream基本使用
2010-07-19 10:03 1379一个配置文件 <?xml version ... -
java基本概念--对象序列化及反序列化
2010-07-19 09:43 1545序列化(一): readResolve()方法与序列化 在CJ ...
相关推荐
7.3.3 java.security.MessageDigest 122 7.3.4 java.security.Signature 123 7.3.5 算法参数 124 7.3.6 java.security.Key和java.security. spec.KeySpec 126 7.3.7 java.security.KeyFactory和java. security....
Java中,可以使用`java.security.MessageDigest`类的`getInstance`方法获取MD5实例,然后对数据进行处理,得到散列值。 SHA(Secure Hash Algorithm)系列,包括SHA-1和SHA-256等,同样是单向散列函数,提供更强的...
在这个例子中,`getMD5`方法接收一个字符串,使用`MessageDigest.getInstance("MD5")`创建一个MD5实例,然后对输入字符串的字节进行哈希处理。得到的结果是一个字节数组,接着通过`String.format("%02x", 0xFF & b)`...
MessageDigest md = MessageDigest.getInstance("MD5"); md.update(info.getBytes()); byte[] digestBytes = md.digest(); return bytesToHex(digestBytes); } catch (NoSuchAlgorithmException e) { e....
7.3.3 java.security.MessageDigest 122 7.3.4 java.security.Signature 123 7.3.5 算法参数 124 7.3.6 java.security.Key和java.security. spec.KeySpec 126 7.3.7 java.security.KeyFactory和java. security....
MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(input.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b &...
MessageDigest digest = MessageDigest.getInstance("SHA-1"); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int read; while ((read = fis.read(buffer)) != -1) { ...
MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : messageDigest) { hexString....
public class HashUtil { public static String sha256(String data) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] hashBytes = messageDigest
MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(input.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b &...
MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(data); return md5.digest(); } } ``` **SHA加密** SHA家族包括SHA-1、SHA-256等,它们提供了更强的安全性。与MD5类似,可以使用`...
7. **数据完整性(Data Integrity)**:`java.security.MessageDigest`类用于计算哈希值,确保数据未被篡改。MD5和SHA家族的算法常用于此目的。 8. **网络安全(Network Security)**:Java的`java.net`包支持SSL/...
Java的`java.security.MessageDigest`类可以生成MD5摘要,常用于数据校验和密码存储。 8. **FastDfs文件服务器**: FastDFS是一个开源的高性能、轻量级的分布式文件系统,Java客户端可以用来上传、下载文件,处理...
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 输出摘要信息 System.out.println(new String(messageDigest.digest(), "UTF8")); } } ``` 除了消息摘要,私钥加密也是密码学中的重要...
MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte aMessageDigest : messageDigest) { ...
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 更新消息 messageDigest.update("明文消息".getBytes("UTF8")); // 输出摘要 byte[] digest = messageDigest.digest(); // 可以将摘要...
MessageDigest digest = MessageDigest.getInstance("SHA-256"); return digest.digest(input.getBytes()); } } ``` 在实际项目中,`encryptModule`可能包含了上述类的实现,以及相关的测试代码和配置文件。这些...
2. **创建MessageDigest实例**:通过调用`MessageDigest.getInstance("MD5")`获取一个MD5实例。这一步是关键,因为MD5是MessageDigest的一个具体实现。 ```java MessageDigest md = MessageDigest.getInstance("MD5...
MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hashBytes = digest.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : hashBytes) { hex...