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. svn checkout 单个文件

    $ svn co --depth=empty file:///usr/local/svn/calc calc_new $ cd calc_new $ svn up readme.txt 其中,calc ...

  2. 一、mysql数据库,忘记密码怎么处理及处理过程中遇见的问题

    1.输入cmd命令打开控制台: 2.进入mysql.exe所在的路径: 3.执行mysqld --skip-grant-tables(注意:在输入此命令之前先在任务管理器中结束mysqld.exe进程 ...

  3. HDU - 4366 Successor DFS区间+线段树

    Successor:http://acm.hdu.edu.cn/showproblem.php?pid=4366 参考:https://blog.csdn.net/colin_27/article/d ...

  4. CodeForces 628 D Magic Numbers 数位DP

    Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...

  5. Hangman Judge UVA - 489

    In ``Hangman Judge,'' you are to write a program that judges a series of Hangman games. For each gam ...

  6. Linux root 用户下 selenium 运行chrome --no-sandbox的问题的解决

    #coding = utf-8 from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_opt ...

  7. Spring Boot 利用 nginx 实现生产环境的伪热更新

    当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...

  8. C++输入输出常用格式(cin,cout,stringstream)

    输入格式 1.cin>>a; 最基本的格式,适用于各种类型.会过滤掉不可见字符例如空格,TAB,回车等 2.cin>>noskipws>>ch[i]; 使用了 no ...

  9. Driect3D初始化演示

    初始化Direct3D演示 初始化Driect3D类: #include "Common\d3dApp.h" #include <DirectXColors.h> us ...

  10. VUE从入门到放弃(项目全流程)————VUE

    VUE从入门到放弃(第一天)--整体流程 先想想一个项目,vue项目是从什么到什么,然后再什么的?那是什么呢? 搭建 ( vue-cli) 代码内容 运行 封装 成品 一.搭建(脚手架vue-cli) ...