以下为加密的工具类:

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 java.security.SecureRandom; import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;
  import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;

public class util {
/**
* 传入名文和公钥钥对数据进行RSA解密
* <br>生成时间:2014年5月2日 下午2:38:13
* <br>返回值:String
* <br>@param src
* <br>@param pubkey
* <br>@return
*/
public static String rsaEncoding(String src,PublicKey pubkey){
try {
Cipher cip = Cipher.getInstance("RSA");
cip.init(cip.ENCRYPT_MODE, pubkey);
byte[] by = cip.doFinal(src.getBytes());
return new String(BASE64EncoderStream.encode(by)); } catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (NoSuchPaddingException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);
} catch (BadPaddingException e) {
throw new RuntimeException(e);
} }
/**
* 传入RSA密文和私钥对数据进行解密
* <br>生成时间:2014年5月2日 下午2:37:08
* <br>返回值:String
* <br>@param sec
* <br>@param privkey
* <br>@return
*/
public static String rsaDeEncoding(String sec,PrivateKey privkey){
try {
Cipher cip = Cipher.getInstance("RSA");
cip.init(cip.DECRYPT_MODE, privkey);
byte[] by = BASE64DecoderStream.decode(sec.getBytes());
return new String(cip.doFinal(by)); } catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (NoSuchPaddingException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);
} catch (BadPaddingException e) {
throw new RuntimeException(e);
} } /**
* 传入字符串、密钥,并加密字符串(对称加密加密),支持:DES、AES、DESede(3DES)
* <br>生成时间:2014年5月2日 下午12:05:44
* <br>返回值:String 密文
* <br>@param src
* <br>@param key
* <br>@param method(DES、AES、DESede)
* <br>@return
*/
//对称加密加密
public static String doubKeyEncoding(String src,String keysrc,String method) {
SecretKey key;
try {
//生成密钥
KeyGenerator kg = KeyGenerator.getInstance(keysrc);
//初始化此密钥生成器。
kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
key = kg.generateKey(); //加密
Cipher ciph = Cipher.getInstance(method);
ciph.init(Cipher.ENCRYPT_MODE, key);
ciph.update(src.getBytes("utf-8"));
//使用64进行编码,一避免出现丢数据情景
byte[] by = BASE64EncoderStream.encode(ciph.doFinal());
return new String(by);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (NoSuchPaddingException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);
} catch (BadPaddingException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
/**
* 传入字符串、密钥、加密方式,并解密字符串(对称加密解密密),支持:DES、AES、DESede(3DES)
* <br>生成时间:2014年5月2日 下午1:12:13
* <br>返回值:String 密钥原文
* <br>@param sec
* <br>@param key
* <br>@param method(DES、AES、DESede)
* <br>@return
*/
public static String doubKeyDencoding(String sec,String keysrc,String method) {
SecretKey key;
try {
//生成密钥
KeyGenerator kg = KeyGenerator.getInstance(keysrc);
//初始化此密钥生成器。
kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
key = kg.generateKey();
//加密
Cipher ciph = Cipher.getInstance(method);
ciph.init(ciph.DECRYPT_MODE, key);
//使用64进行解码,一避免出现丢数据情况
byte[] by = BASE64DecoderStream.decode(sec.getBytes());
ciph.update(by);
return new String(ciph.doFinal()); } catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (NoSuchPaddingException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);
} catch (BadPaddingException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
} /**
* 单向信息加密(信息摘要),支持:md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512,
* <br>生成时间:2014年5月2日 上午11:13:44
* <br>返回值:String 加密后的密文
* <br>@param src 传入加密字符串(明文)
* <br>@param method 指定算法(md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512)
* <br>@return
*/
public static String ecodingPasswd(String src,String method){ try {
//信息摘要算法
MessageDigest md5 = MessageDigest.getInstance(method);
md5.update(src.getBytes());
byte[] encoding = md5.digest();
//使用64进行编码,一避免出现丢数据情景
return new String(BASE64EncoderStream.encode(encoding));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e+"加密失败!!");
} }
}

以下为测试类

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey; import org.junit.Test; import com.shuqi.utils.util; public class test {
@Test
public void ecoding() {
// //MD5 加密
// System.out.println("md5"+util.ecodingPasswd("shuqi", "md5"));
// System.out.println("md2"+util.ecodingPasswd("shuqi", "md2"));
// //sha加密
// System.out.println("sha"+util.ecodingPasswd("shuqi", "sha"));
// System.out.println("sha-1"+util.ecodingPasswd("shuqi", "sha-1"));
// System.out.println("sha1"+util.ecodingPasswd("shuqi", "sha1"));
// System.out.println("sha-256"+util.ecodingPasswd("shuqi", "sha-256"));
// System.out.println("sha-384"+util.ecodingPasswd("shuqi", "sha-384"));
// System.out.println("sha-512"+util.ecodingPasswd("shuqi", "sha-512")); // String mi = util.doubKeyEncoding("hehe", "shuqi", "AES");
// String ming = util.doubKeyDencoding(mi, "shuqi", "AES");
// System.out.println("AES加密解密");
// System.out.println("加密hehhe,密文 >>> "+mi);
// System.out.println("解密"+mi+",明文 >>> "+ming);
//
// mi = util.doubKeyEncoding("hehe", "shuqi", "DES");
// ming = util.doubKeyDencoding(mi, "shuqi", "DES");
// System.out.println("DES加密解密");
// System.out.println("加密hehhe,密文 >>> "+mi);
// System.out.println("解密"+mi+",明文 >>> "+ming);
//
// mi = util.doubKeyEncoding("hehe", "shuqi", "DESede");
// ming = util.doubKeyDencoding(mi, "shuqi", "DESede");
// System.out.println("DESede加密解密");
// System.out.println("加密hehhe,密文 >>> "+mi);
// System.out.println("解密"+mi+",明文 >>> "+ming); /**
* RSA算法的验证
*/
try {
//实例化一个密钥对生成器
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
//得到密钥对对象
KeyPair kp = kpg.genKeyPair();
PrivateKey prikay = kp.getPrivate();
PublicKey pubkey = kp.getPublic(); String mi = util.rsaEncoding("shuqi", pubkey);
String ming = util.rsaDeEncoding(mi, prikay);
System.out.println(ming+" :: "+mi); } catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
} }

  参考文章:shibenjie的博文  snowolf的博文

java中常用的数据加密算法的更多相关文章

  1. Java中常用的查找算法——顺序查找和二分查找

    Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...

  2. java中常用的工具类(三)

    继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类       ...

  3. Java中常用的运算符

    运算符是一种“功能”符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运算符 Java 中常 ...

  4. java中常用的字符串的截取方法

    java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...

  5. Java高级特性 第2节 java中常用的实用类(1)

    一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...

  6. Java学习笔记五:Java中常用的运算符

    Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ...

  7. 动图+源码,演示Java中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  8. 动图+源码,演示 Java 中常用数据结构执行过程及原理

    ​阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想 ...

  9. Java中常用的七个阻塞队列介绍第一篇

    Java中常用的七个阻塞队列介绍第一篇 在上一篇我们对Java中的队列分类做了简单的介绍.本文咱们主要来聊聊阻塞队列中的七个常用子类.这七个阻塞队列的学习步骤:先看源码,分析完源码之后,我们再来对每个 ...

随机推荐

  1. ER图与UML图

    ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来描述现实世界的概念 ...

  2. Maven 搭建与my-app项目测试

    前提条件,安装jdk1.6及以上版本,并配置JAVA_HOME 首先,下载Maven3.2.2,附下载地址:http://mirror.bit.edu.cn/apache/maven/maven-3/ ...

  3. mysql 按日期查询

    在mysql中,比如你的表的时间字段是column2,并且column2的类型是timestamp 单日查询: select * from TableName where column1='xxxx' ...

  4. Android 数据适配器

    把复杂的数据(数组.链表.数据库.集合等)填充到指定的视图界面上.   arrayAdapter(数组适配器):      用于绑定一些格式单一的数据,数据源:数据或者集合.   private Li ...

  5. Android Material Design调色板

    转: http://www.stormzhang.com/design/2014/12/26/material-design-palette/ Material Design出来一段时间了,身为And ...

  6. jQuery获取Select选择的Text和Value(详细汇总)

    语法解释: 1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var ch ...

  7. this指针与function变量--this究竟指向哪里?

    参考文章:<深入浅出 JavaScript 中的 this> http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/ Ja ...

  8. SQL Server 统计信息对查询的影响

    优化器根据开消确定选择哪个执行计划,开消又与行数统计信息有关,默认情况下统计信息是在优化的过程中自动生成的. 一旦列被标记为需要统计信息,查询优化器就会查找该列以有的统计信息,如果以有一个统计信息,下 ...

  9. XCode破解真机调试

    XCode破解真机调试  3.0 一.这样做以后能怎样 以device模式编译出app 可以再越狱后的设备上运行 二.要会点什么 命令行,也就是terminal.终端.控制台... vim 三.开始吧 ...

  10. Android Intent的几种用法总结【转】

    Intent应该算是Android中特有的东西.你可以在Intent中指定程序要执行的动作(比如:view,edit,dial),以及程序执行到该动作时所需要的资料.都指定好后,只要调用startAc ...