`
ruirui516888
  • 浏览: 137208 次
文章分类
社区版块
存档分类
最新评论

java.security.MessageDigest的使用(1)!

 
阅读更多

我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...

MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. StringusernameMD5=messageDigest.digest().toString();
  8. System.out.println(usernameMD5);
  9. }catch(Exceptione){
  10. e.printStackTrace();
  11. }
  12. }
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(Base64.encode(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印的是:AgwpBZPO+ErqxOosJp0ybQ==

当然我们可以编写函数,处理二进制转hex字符串.

如:

  1. /**
  2. *将16位byte[]转换为32位String
  3. *
  4. *@parambuffer
  5. *@return
  6. */
  7. privateStringtoHex(bytebuffer[]){
  8. StringBuffersb=newStringBuffer(buffer.length*2);
  9. for(inti=0;i<buffer.length;i++){
  10. sb.append(Character.forDigit((buffer[i]&240)>>4,16));
  11. sb.append(Character.forDigit(buffer[i]&15,16));
  12. }
  13. returnsb.toString();
  14. }

编写测试语句

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(toHex(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印:020c290593cef84aeac4ea2c269d326d,返回的是32位的字符串!!!

这样我们便可以直接使用JDK为我们提供的加密类与函数了!

MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"

创建的方法只为: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");

MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)

难道MessageDigest 只能用作数据加密吗?如何使用MessageDigest生成安全令牌!!!


转:http://blog.csdn.net/eclipser1987/article/details/5158784


我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...

MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. StringusernameMD5=messageDigest.digest().toString();
  8. System.out.println(usernameMD5);
  9. }catch(Exceptione){
  10. e.printStackTrace();
  11. }
  12. }
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(Base64.encode(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印的是:AgwpBZPO+ErqxOosJp0ybQ==

当然我们可以编写函数,处理二进制转hex字符串.

如:

  1. /**
  2. *将16位byte[]转换为32位String
  3. *
  4. *@parambuffer
  5. *@return
  6. */
  7. privateStringtoHex(bytebuffer[]){
  8. StringBuffersb=newStringBuffer(buffer.length*2);
  9. for(inti=0;i<buffer.length;i++){
  10. sb.append(Character.forDigit((buffer[i]&240)>>4,16));
  11. sb.append(Character.forDigit(buffer[i]&15,16));
  12. }
  13. returnsb.toString();
  14. }

编写测试语句

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(toHex(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印:020c290593cef84aeac4ea2c269d326d,返回的是32位的字符串!!!

这样我们便可以直接使用JDK为我们提供的加密类与函数了!

MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"

创建的方法只为: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");

MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)

难道MessageDigest 只能用作数据加密吗?如何使用MessageDigest生成安全令牌!!!


转:http://blog.csdn.net/eclipser1987/article/details/5158784

分享到:
评论

相关推荐

    Java 2平台安全技术-结构,API设计和实现

    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 2平台安全技术-结构,API设计和实现

    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加密和数字签名编程快速入门

    可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作...

    java加密枝术.doc

    java.security包中的MessageDigest类提供了计算消息摘要的方法, 首先生成对象,执行其update( )方法可以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。

    使用JAVA代码实现MD5加密

    import java.security.MessageDigest; import sun.misc.BASE64Encoder; /** * * @author * 版本号:CATTSOFT 1.2.0 * 日期:2009年3月8日 * 功能:对一个字符串进行md5加密 */ public class EncryptUtil { ...

    Java计算文件MD5值(支持大文件)

    import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; /** *MD5计算工具 xuxile 2017-09-13 */ public ...

    Java 中文件MD5和SHA1的比较

    Java 中文件的MD5和SHA-1的研究 Java中提供了一个类java.security.MessageDigest类是一种提供密码安全消息摘要如SHA-1和MD5功能的引擎类。不需要额外使用第三方组件,且支持超大文件。

    SHA-256 java加密代码

    ava.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要...

    MD5的算法和使用

    import java.security.*; import java.util.*; /** * */ public class MD5 { private String inStr; private MessageDigest md5; /** * Constructs the MD5 object and sets the string whose MD5 is to be ...

    跑腿源码java-cryptographic-hashing:密码散列

    java.security.MessageDigest; MessageDigest 类为应用程序提供了消息处理计算的有用性,例如 SHA-1 或 SHA-256。 消息摘要是安全的单向散列容量,它采用任意大小的信息并产生固定长度的散列值。 导入 java.math....

    微信小程序配置服务器提示验证token失败的解决方法

    最近在学习微信小程序,遇到的第一个问题就是需要配置服务器 关于这个服务器的配置我也是绕了好多弯路,说白了...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java

    MD5加密 用于数据 密码加密

    MD5的方式加密数据 通过导入一个 import java.security.MessageDigest;的包来实现 MessageDigest mdInst = MessageDigest.getInstance("MD5"); 使用这个方法

    分享JavaScript与Java中MD5使用两个例子

    在网上查了一下,在网上收集了Java...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { public static void main(String[] args){ System.out.println

    Android md5加密与php md5加密一致详解

    在Android开发过程中加密密码常常采用md5加密方式,然而如果... import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { //密码加密 与php加密一致 public s

    md5中使用MD5加密算法进行加密

    import java.security.*; import java.security.spec.*; class MD5_Test{ public final static String MD5(String s){ char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd...

    Android编程之MD5加密算法实例分析

    Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包。实际上与J2SE平台一模一样。 算法签名: 代码如下:String getMD5(String val) throws NoSuchAlgorithmException ...

    java加密枝术深入理解

    java.security包中的MessageDigest类提供了计算消息摘要的方法,本文将详细介绍,需要了解的朋友可以参考下

    Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包

    增加 java.security.PublicKey 的子类 SM2PublicKey 增加 java.security.PrivateKey 的子类 SM2PrivateKey 全功能支持 SM3withSM2 算法的 X.509 证书结构体解释与密码运算 支持 BKS、PKCS#12 KeyStore 生成、解释、...

    java 易懂易用的MD5加密(可直接运行)(2)

    import java.io.IOException; import java.io.UnsupportedEncodingException;... import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.crypto.Ci

    android中Sha256加密算法

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Sha256 { public static String getSHA256(String str){ MessageDigest messageDigest; String encodestr = ...

Global site tag (gtag.js) - Google Analytics