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. Python之函数(一)定义函数以及传参

    定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...

  2. Delphi - cxGrid添加Footer显示

    cxGrid - 添加footer显示 1:添加Footer Items 单击cxGrid Customize... ,Summary,Add: 2:添加Footer items数据绑定 选中一条需要 ...

  3. Nginx总结(五)如何配置nginx和tomcat实现反向代理

    前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要 ...

  4. cogs249 最长公共子串(后缀数组 二分答案

    http://cogs.pro:8080/cogs/problem/problem.php?pid=pxXNxQVqP 题意:给m个单词,让求最长公共子串的长度. 思路:先把所有单词合并成一个串(假设 ...

  5. POJ-2104 K-th Number CDQ分治

    题目传送门 题意:给你一个序列,长度为n,m次询问,询问一段区间的第k大. 题解:CDQ分治,对整个值域进行分治.每次取一个mid, 计算出整个区间内mid <= 的数目,如果 num > ...

  6. 模板汇总——Tarjian

    1. 单向边  + 新图建边 int belong[N], dfn[N], low[N], now_time, scc_cnt; stack<int> s; void dfs(int u) ...

  7. codeforces 478 D. Red-Green Towers(背包)

    题目链接:http://codeforces.com/problemset/problem/478/D 题意:给出红色方块r个,绿色方块g个,问最高能叠几层等腰三角形,而且每一层的颜色必须相同. 题解 ...

  8. hdu 3374 String Problem(最小表示法+最大表示法+kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给出一个字符串问这个字符串最小表示的最小位置在哪,还有有几个最小表示的串.最大表示的位置在 ...

  9. SQL数据同步到ELK(二)- Elastic Search 安装

    开篇废话 没错,前面扯了一堆SQL SERVER,其实我连Elastic Search根本没动手玩过(是不是与时代有点脱节了?),那今天我就准备尝试安装一个ELK的简单集群出来(这个集群是使用我的小米 ...

  10. win、mac 设置 php上传文件大小限制

    修改php.ini win平台WAMP修改 步骤 左键点击wamp 选择php 在弹出的窗口中选择php.ini 在打开的文件中进行修改(修改步骤如下) 修改完毕,保存并重启wamp mac  MAM ...