实例讲解java的纯数字加密解密

我们都知道,在用户添加信息时,一些比较敏感的信息,如身份证号,手机号,用户的登录密码等信息,是不能直接明文存进数据库的.今天我们就以一个具体的例子来说明一下纯数字的java加密解密技术.

一般我们从页面获取到用户添加的信息之后,进行加密然后存入到数据库.需要比对信息时,加密之后的用户信息我们看不懂,所以对应的我们就要用解密技术.其实软考中对加密解密技术进行了很全面的说明,这里我们就用一个比较简单的实例来说明一下.

我们可能会习惯在service层进行加密,这个没有太强制的要求.下面我们就具体来看一下加密的过程.先说明一下,因为我的密码是六位有效数字,所以我们需要把这六位有效数字进行加密,代码如下:

<span style="white-space:pre">  </span>/**
   * <p>Description: 密码加密</p>
   * @param Userpasword 传过来的六位数字密码
   * @return 加密后的字符串
   * @throws Exception
   * @date: 2015年7月27日
   */
  public String secretEncrypt(String Userpasword) throws Exception {
      //使用Cipher的实例
      Cipher cipher =Cipher.getInstance("AES");
      //得到加密的钥匙
      SecretKey key =KeyGenerator.getInstance("AES").generateKey();
      //初始化加密操作,传递加密的钥匙
      cipher.init(Cipher.ENCRYPT_MODE,key);
      //将加密的内容传递进去,返回加密后的二进制数据
      String results =cipher.doFinal(Userpasword.getBytes()).toString();  

    //返回加密后的字符串
      return results;
    } 

在具体代码中的应用:

<span style="white-space:pre">  </span>/**
   * <p>Description: 保存用户基本信息</p>
   * @param personBaseInfo 用户基本信息实体
   * @return 布尔型,true代表添加成功,false代表添加失败
   * @throws Exception
   * @date: 2015年7月27日
   */
  public boolean saveUserInformation(UserBaseInfo userBaseInfo) throws Exception{
    boolean result = false;
    try{
      //保存用户基本信息
      System.out.println("用户密码:" + secretEncrypt(userBaseInfo.getUserPassword()));
      //给密码加密,然后放在实体里进行保存
      userBaseInfo.setSUserPassword(secretEncrypt(userBaseInfo.getUserPassword()));
      //保存用户信息
      userBaseInfoService.save(userBaseInfo);
      result = true;
    }catch(Exception e){
      e.printStackTrace();
    }
    return result;
  } 

存到数据库中的用户密码为:第二行就是经过加密后的用户密码.

好了,上面介绍了加密的过程,当然少不了解密的过程.你可不能说我们现在需求只让做加密,没有解密.是,可能暂时页面上没有那么多需求,但是加密和解密本身就是一对共生体.你单单你做了加密,如果将来别人接手你的项目,一看只有加密没有解密,无疑就是给别人挖了一个大坑,所以记住,做加密时一定要把解密一起做了,哪怕现在用不到.解密代码如下:

<span style="font-size: 18px; white-space: pre;"> </span><span style="font-size:14px;">/**
   * <p>Description: 解密函数</p>
   * @param userPassword
   * @return
   * @throws Exception
   * @author    : gaoying
   * @update    :
   * @date     : 2015-7-27
   */
  public String secretDecrypt(String userPassword) throws Exception{
    //使用Cipher的实例
    Cipher cipher =Cipher.getInstance("AES");
    //获取文件中的key进行解密
    FileInputStream fisKey=new FileInputStream("secretKey.key");
    ObjectInputStream oisKey =new ObjectInputStream(fisKey);
    Key key =(Key)oisKey.readObject();
    oisKey.close();
    fisKey.close();  

    //初始化解密操作,传递加密的钥匙
    cipher.init(Cipher.DECRYPT_MODE,key);  

    //获取文件中的二进制数据
    FileInputStream fisDat=new FileInputStream("secretContent.dat");
    //获取数据
    byte [] src=new byte [fisDat.available()];
    int len =fisDat.read(src);
    int total =0;
    while(total<src.length){
      total +=len;
      len=fisDat.read(src,total,src.length-total);
    }
    //执行解密
    String result=cipher.doFinal(src).toString();
    return result;
  }</span>

好了,综上所述,我们把加密和解密都讲完了,记住我上面说的话,加密和解密本身就是一对共生体,缺一不可.所以不要图一时轻松,只做加密,而把解密给扔掉。

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Java中常用加密/解密方法详解

    安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方式.Base64不生成密钥,通过Base64编码后的密文就可以直接"翻译"为明文,但是可以通过向明文中添加混淆字符来达到加密的效果. 2.DES DES是一种基于56位密钥的对称算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来.现在DE

  • PHP、Java des加密解密实例

    des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 复制代码 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  $key = "This is a very secre

  • java中DES加密解密

    废话不多说,直接奉上代码: 复制代码 代码如下: package com.eabax.plugin.yundada.utils; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.Invalid

  • java中常用工具类之字符串操作类和MD5加密解密类

    java中常用的工具类之String和MD5加密解密类 我们java程序员在开发项目的是常常会用到一些工具类.今天我分享一下我的两个工具类,大家可以在项目中使用. 一.String工具类 package com.itjh.javaUtil; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import

  • java常用工具类之DES和Base64加密解密类

    一.DES加密和解密 package com.itjh.javaUtil; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecExc

  • 兼容PHP和Java的des加密解密代码分享

    php代码: <?php class DES { var $key; var $iv; //偏移量 function DES($key, $iv=0) { $this->key = $key; if($iv == 0) { $this->iv = $key; } else { $this->iv = $iv; } } //加密 function encrypt($str) { $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MO

  • java加密算法分享(rsa解密、对称加密、md5加密)

    复制代码 代码如下: import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import jav

  • Java实现MD5加密及解密的代码实例分享

    基础:MessageDigest类的使用 其实要在Java中完成MD5加密,MessageDigest类大部分都帮你实现好了,几行代码足矣: /** * 对字符串md5加密 * * @param str * @return */ import java.security.MessageDigest; public static String getMD5(String str) { try { // 生成一个MD5加密计算摘要 MessageDigest md = MessageDigest.g

  • Java实现DES加密与解密,md5加密以及Java实现MD5加密解密类

    很多时候要对秘要进行持久化加密,此时的加密采用md5.采用对称加密的时候就采用DES方法了 import java.io.IOException; import java.security.MessageDigest; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import j

  • 基于Java实现的Base64加密、解密原理代码

    一.概述 1.Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在

随机推荐