1、MD5(Message Digest Algorithm)加密算法

是一种单向加密算法,只能加密不能解密,示例

/**
* MD5简单加密
* @param content 加密内容
* @return String
*/
public static String md5Encrypt(final String content) { MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance(ALGORITHM_MD5);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// md5.update(text.getBytes());
//digest()最后返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
//BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
BigInteger digest = new BigInteger(md5.digest(content.getBytes()));
//32位
return digest.toString(16);
}

2、BASE64进行加密/解密

通常用作对二进制数据进行加密,示例

/**
* base64加密
* @param content 待加密内容
* @return byte[]
*/
public static byte[] base64Encrypt(final String content) {
return Base64.getEncoder().encode(content.getBytes());
} /**
* base64解密
* @param encoderContent 已加密内容
* @return byte[]
*/
public static byte[] base64Decrypt(final byte[] encoderContent) {
return Base64.getDecoder().decode(encoderContent);
}

3、DES(Data Encryption Standard)对称加密/解密

数据加密标准算法,和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串,示例

/**
* DES加密
* @param key 秘钥key
* @param content 待加密内容
* @return byte[]
*/
public static byte[] DESEncrypt(final String key, final String content) {
return processCipher(content.getBytes(), getSecretKey(key), Cipher.ENCRYPT_MODE , ALGORITHM_DES);
} /**
* DES解密
* @param key 秘钥key
* @param encoderContent 已加密内容
* @return byte[]
*/
public static byte[] DESDecrypt(final String key, final byte[] encoderContent) {
return processCipher(encoderContent, getSecretKey(key), Cipher.DECRYPT_MODE, ALGORITHM_DES);
}

4、RSA非对称加密/解密

非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。示例

/**
* RSA加密
* @param content 待加密内容
* @return byte[]
*/
public static byte[] RSAEncrypt(final String content) {
return processCipher(content.getBytes(), keyPair.getPrivate(), Cipher.ENCRYPT_MODE , ALGORITHM_RSA);
} /**
* RSA解密
* @param encoderContent 已加密内容
* @return byte[]
*/
public static byte[] RSADecrypt(final byte[] encoderContent) {
return processCipher(encoderContent, keyPair.getPublic(), Cipher.DECRYPT_MODE, ALGORITHM_RSA);
}

5、SHA(Secure Hash Algorithm,安全散列算法)

数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域,示例

/**
* SHA加密
* @param content 待加密内容
* @return String
*/
public static String SHAEncrypt(final String content) {
try {
MessageDigest sha = MessageDigest.getInstance(ALGORITHM_SHA);
byte[] sha_byte = sha.digest(content.getBytes());
StringBuffer hexValue = new StringBuffer();
for (byte b : sha_byte) {
//将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。
String toHexString = Integer.toHexString(b & 0xff);
hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString);
}
return hexValue.toString(); // StringBuffer hexValue2 = new StringBuffer();
// for (int i = 0; i < sha_byte.length; i++) {
// int val = ((int) sha_byte[i]) & 0xff;
// if (val < 16) {
// hexValue2.append("0");
// }
// hexValue2.append(Integer.toHexString(val));
// }
// return hexValue2.toString();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}

6、HMAC(Hash Message Authentication Code,散列消息鉴别码)

使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证,示例

/**
* HMAC加密
* @param key 给定秘钥key
* @param content 待加密内容
* @return String
*/
public static byte[] HMACEncrypt(final String key, final String content) {
try {
SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
//初始化mac
mac.init(secretKey);
return mac.doFinal(content.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

测试代码:

public static void main(String[] args) {
//md5简单加密
String text = "i am text";
System.out.println(EnDecoderUtil.md5Encrypt(text)); //base64进行加密解密,通常用作对二进制数据进行加密
byte[] base64Encrypt = EnDecoderUtil.base64Encrypt("123456789");
String toHexString = HexUtils.toHexString(base64Encrypt);
System.out.println(toHexString);
byte[] base64Decrypt = EnDecoderUtil.base64Decrypt(base64Encrypt);
System.out.println(new String(base64Decrypt)); //DES对称加密/解密
//要求key至少长度为8个字符
String key = "123456789";
//加密
byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, "Hello, DES");
System.out.println(Base64.getEncoder().encodeToString(encode_bytes));
//解密
byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes);
System.out.println(new String(decode_bytes)); //RSA
//数据使用私钥加密
byte[] en_byte = EnDecoderUtil.RSAEncrypt("Hi, RSA");
System.out.println(Base64.getEncoder().encodeToString(en_byte)); //用户使用公钥解密
byte[] de_byte = EnDecoderUtil.RSADecrypt(en_byte);
System.out.println(new String(de_byte)); //服务器根据私钥和加密数据生成数字签名
byte[] sign_byte = EnDecoderUtil.getSignature(en_byte);
System.out.println(Base64.getEncoder().encodeToString(sign_byte)); //用户根据公钥、加密数据验证数据是否被修改过
boolean verify_result = EnDecoderUtil.verifySignature(en_byte, sign_byte);
System.out.println(verify_result); //SHA
String sha = EnDecoderUtil.SHAEncrypt("Hi, RSA");
System.out.println(sha); //HMAC
byte[] mac_bytes = EnDecoderUtil.HMACEncrypt(key, "Hi, HMAC");
System.out.println(HexUtils.toHexString(mac_bytes));
}

源码参照Github

java 加密解密方式的更多相关文章

  1. ◆JAVA加密解密-3DES

    从数据安全谈起       当你使用网银时,是否担心你的银行卡会被盗用?     当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露?     作为开发者,编写安全的代码比编写优雅的代码更重要,因为 ...

  2. java加密解密的学习

    注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...

  3. Java加密解密字符串

    http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串   旧文重发:http://www.blogjava ...

  4. java加密解密

    java加密解密 public class MD5Util { /** * @param args */ public static void main(String[] args) { System ...

  5. password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

    Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...

  6. Java加密解密大全

    ChinaSEI系列讲义(By 郭克华)   Java加密解密方法大全                     如果有文字等小错,请多包涵.在不盈利的情况下,欢迎免费传播. 版权所有.郭克华 本讲义经 ...

  7. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

  8. cooking java ——加密解密

    java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...

  9. Java加密解密相关

    关于解释加密解密中的填充方案: http://laokaddk.blog.51cto.com/368606/461279/ 关于对称加密中的反馈模式: http://blog.csdn.net/aaa ...

随机推荐

  1. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  2. Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View)

    Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View) 深度优先搜索的解题详细介绍,点击 给定一棵二叉树,想象自己站在它的右侧 ...

  3. Python实现的一些常见简单问题(持续更新)

    提纲: 1.汉诺塔 2.找到某个范围内的所有质数 3.杨辉三角 4.用闭包实现一个计数器,调用一次计数器加1 5.将类构造成可迭代对象,实现斐波那契数列 ...... 1.汉诺塔(汉诺塔) 用递归函数 ...

  4. Python连载35-死锁问题以及解决方式

    一.死锁问题 例子 import threading import time ​ lock_1 = threading.Lock() lock_2 = threading.Lock() ​ def f ...

  5. 同步vmware虚拟机和主机的时间

    1. 打开虚拟机->设置 2. 选择选项标签页,选中VMware Tools,勾选“将客户机时间与主机同步”

  6. hdu 5945 Fxx and game(dp+单调队列! bc#89)

    Young theoretical computer scientist Fxx designed a game for his students. In each game, you will ge ...

  7. CQ18阶梯赛第二场

    H国的身份证号码I HihoCoder - 1558 只要单纯的判断一下前后的乘积就好了, 因为不是很想处理倍数的关系, 所以我这里是用 string去处理. 代码: #include<bits ...

  8. hdu 4081 Qin Shi Huang's National Road System(次小生成树prim)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 题意:有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点. ...

  9. CF993A Two Squares 几何 第二道 暴力或判断条件(*)

    Two Squares time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  10. JAVA - 一个for循环实现99乘法表

    public class Test03 {public static void main(String[] args) { int lie = 1; for (int hang = 1; hang&l ...