- 浏览: 452653 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1904最近这段时间在处理一个项目迁移,结果有大量的时间在写迁移代码。 ... -
Java.lang.reflect 包下常用的类及方法简介
2011-12-01 18:50 4106Class类之主要方法简介 Class<?&g ... -
Collections.EMPTY_LIST和Collections.emptyList()简单使用体会
2011-04-29 10:57 50801.背景 在某些情况下, ... -
JAVA SAX解析
2010-09-17 15:29 3847java sax 解析 JAVA 解析 XML 通常有两种方 ... -
多线程笔记--2
2010-07-30 17:19 105611, 在没有同步的情况下 , 编译器与处理器运行时的指令执行 ... -
JDK学习--java.util.concurrent.ConcurrentMap输出及输入
2010-07-30 17:14 2598新的 java.util.concurrent.Concurr ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:12 968PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:11 1159PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:10 2037Tiger提供的 java.util.concurrent 包 ... -
socket基本通信
2010-07-28 22:33 31671.服务端 while(true){ ... -
java.util.zip
2010-07-19 16:49 1327主要是三个类: ZipOutputStream ... -
java.util.LinkedHashMap (2)
2010-07-19 16:43 1331step 1:建立对象。采用最少访问次数排序。 ... -
java.util.LinkedHashMap (1)
2010-07-19 16:42 3012LinkedHashMap :具有可预知的迭代顺序。区别与Ha ... -
java比较器的两种实现
2010-07-19 14:48 17941 实现一个Comparator 接口 public cl ... -
java.util.IdentityHashMap
2010-07-19 14:47 1675Map<Object, String> map = ... -
java.util.Arrays
2010-07-19 14:47 1282一些基本常用的方法: 一. 数组中的查找: ... -
apache 处理目录
2010-07-19 10:22 961private static class MyWalk ... -
一些core java知识
2010-07-19 10:05 10591. 对于url中需要转化的# %符号,可以采用base64编 ... -
xstream基本使用
2010-07-19 10:03 1359一个配置文件 <?xml version ... -
java基本概念--对象序列化及反序列化
2010-07-19 09:43 1525序列化(一): 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....
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 messageDigest=MessageDigest.getInstance("SHA-1"); //开始使用算法 messageDigest.update(plainText); //输出算法运算结果 System.out.println(new String(messageDigest.digest(),"UTF8")...
import java.security.MessageDigest; import sun.misc.BASE64Encoder; /** * * @author * 版本号:CATTSOFT 1.2.0 * 日期:2009年3月8日 * 功能:对一个字符串进行md5加密 */ public class EncryptUtil { ...
MessageDigest MD5 = MessageDigest.getInstance("MD5"); fileInputStream = new FileInputStream(file); byte[] buffer = new byte[8192]; int length; while ((length = fileInputStream.read(buffer...
在Java中,MD5加密工具可以使用java.security.MessageDigest类来实现。MessageDigest类提供了一个update()方法来更新要加密的数据,并提供了一个digest()方法来获取加密后的散列值。 在本文档的示例代码中,我们...
最近在学习微信小程序,遇到的第一个问题就是需要配置服务器 关于这个服务器的配置我也是绕了好多弯路,说白了...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java
在Android开发过程中加密密码常常采用md5加密方式,然而如果... import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { //密码加密 与php加密一致 public s
MD5的方式加密数据 通过导入一个 import java.security.MessageDigest;的包来实现 MessageDigest mdInst = MessageDigest.getInstance("MD5"); 使用这个方法
Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包。实际上与J2SE平台一模一样。 算法签名: 代码如下:String getMD5(String val) throws NoSuchAlgorithmException ...
Java 中文件的MD5和SHA-1的研究 Java中提供了一个类java.security.MessageDigest类是一种提供密码安全消息摘要如SHA-1和MD5功能的引擎类。不需要额外使用第三方组件,且支持超大文件。
java.security.MessageDigest; MessageDigest 类为应用程序提供了消息处理计算的有用性,例如 SHA-1 或 SHA-256。 消息摘要是安全的单向散列容量,它采用任意大小的信息并产生固定长度的散列值。 导入 java.math....
import java.security.MessageDigest; public class MD5Util { private static final String ALGORITHM = MD5; private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', ...
在网上查了一下,在网上收集了Java...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { public static void main(String[] args){ System.out.println
import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Vector; import org....
java.security包中的MessageDigest类提供了计算消息摘要的方法, 首先生成对象,执行其update( )方法可以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。
代码如下: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;... try { messageDigest = MessageDigest.getInstance(“MD5
ava.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要...
MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(obj); return md5.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } ``` 二、SHA 加密算法 ...
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Sha256 { public static String getSHA256(String str){ MessageDigest messageDigest; String encodestr = ...