java 加密
加密。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密。
双向加密大体意思就是明文加密后形成密文,能够通过算法还原成明文。
单向加密仅仅是对信息进行了摘要计算,不能通过算法生成明文。
双向加密
对称加密
密钥是控制加密及解密过程的指令。
加密和解密使用同样密钥。也称为单密钥加密, 对称式加密本身不是安全的。
经常使用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。
DES被成为美国数据加密标准,是1972年美国IBM公司研制的对称password体制加密算法。
AES高级加密标准(Advanced Encryption Standard),是美国联邦政府採用的一种区块加密标准。这个标准用来替代原先的DES,2006年,已然成为对称密钥加密中最流行的算法之中的一个。
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class EncryptTool {
public static String encrypt(String seed, String clearText) throws Exception {
byte[] rawkey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawkey, clearText.getBytes());
return toHex(result);
}
public static String decrypt(String seed, String encrypted) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}
/**
* 生成给定的种子字节数
* @param seed
* @return
* @throws Exception
*/
private static byte[] getRawKey(byte[] seed) throws Exception {
//KeyGenerator 提供对称密钥生成器的功能。支持各种算法 DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr);
SecretKey sKey = kgen.generateKey();
byte[] raw = sKey.getEncoded();
return raw;
}
/**
* 对字节串clear加密
* @param raw
* @param clear
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
//SecretKeySpec 负责保存对称密钥
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
//Cipher 负责完毕加密或解密工作
Cipher cipher = Cipher.getInstance("AES");
//ENCRYPT_MODE 表示加密
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
/**
* 对字节串encrypted解密
* @param raw
* @param encrypted
* @return
* @throws Exception
*/
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
//DECRYPT_MODE 表示解密
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String txt) {
return toHex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String hexString) {
int len = hexString.length() / 2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();
return result;
}
public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2 * buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private static void appendHex(StringBuffer sb, byte b) {
final String HEX = "0123456789ABCDEF";
sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
}
}
非对称加密
与对称加密算法不同。非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,假设用公开密钥对数据进行加密。仅仅实用相应的私有密钥才干解密;假设用私有密钥对数据进行加密。那么仅仅实用相应的公开密钥才干解密。
由于加密和解密使用的是两个不同的密钥,所以这样的算法叫作非对称加密算法。
1.RSA是眼下最有影响力的公钥加密算法。它能够抵抗到眼下为止已知的全部password攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分easy,但那时想要对其乘积进行因式分解却极其困难。因此能够将乘积公开作为加密密钥。
2.DSA Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种。被美国NIST作为DSS(DigitalSignature Standard)。
单向加密
常见的单向加密:
BASE64 严格地说,属于编码格式。而非加密算法
MD5(Message Digest algorithm 5,信息摘要算法)
SHA(Secure Hash Algorithm,安全散列算法)
HMAC(Hash Message Authentication Code。散列消息鉴别码)
Java一般须要获取对象MessageDigest来实现单项加密。
MD5 即Message-Digest Algorithm 5(信息-摘要算法 5)。MD5的前身有MD2、MD3和MD4。用于确保信息传输完整一致。
是计算机广泛使用的杂凑算法之中的一个,主流编程语言普遍已有MD5
实现。MD5就是把一个随意长度的字节串变换成一定长的十六进制数字串。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class EncrypMD5 {
public byte[] eccrypt(String info) throws NoSuchAlgorithmException{
//依据MD5算法生成MessageDigest对象
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] srcBytes = info.getBytes();
//使用srcBytes更新摘要
md5.update(srcBytes);
//完毕哈希计算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
}
}
一般MD5和BASE64一起使用
java 加密的更多相关文章
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- java加密解密的学习
注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...
- Java Security:Java加密框架(JCA)简要说明
加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- Java加密技术
相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法 ...
- 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码
JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...
- Java 加密 AES 对称加密算法
版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...
- Java加密解密字符串
http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava ...
- Java加密与解密笔记(一) Base64和数据摘要算法
对加密解密下面的内容一定要先理解: 甲乙双方要通信,中间的连接可能被人窃听甚至篡改.解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容. 加密时,甲乙双方可以约定 ...
随机推荐
- windows下apk查看工具的原理
游戏出了版本之后,提供给渠道,有部分渠道会修改包名(当他们内部系统做出调整后,可能会改包名),这个时候我又需要知道包名.之前没办法,试图反编译apk,发现失败了.然后就安装apk到手机上,手机上再下载 ...
- Spring MVC+Mybatis 多数据源配置
文章来自:https://www.jianshu.com/p/fddcc1a6b2d8 1. 继承AbstractRoutingDataSource AbstractRoutingDataSource ...
- golang的配置文件操作:viper
参考: 1.http://blog.51cto.com/13599072/2072753 2.https://studygolang.com/articles/14453 3.https://www. ...
- golang的日志系统log和glog
go语言有一个标准库,log,提供了最基本的日志功能,但是没有什么高级的功能,如果需要高级的特性,可以选择glog或log4go. 参考:https://cloud.tencent.com/devel ...
- Win2008建立域时administrator账户密码不符合要求
在win2008中建立域时,有时会出现administrator账户密码不符合要求的现象,报错会说明目前本地administrator账户不需要密码.这是什么原因造成的呢?原来,目前的2008镜像在网 ...
- matlib实现梯度下降法
样本文件下载:ex2Data.zip ex2x.dat文件中是一些2-8岁孩子的年龄. ex2y.dat文件中是这些孩子相对应的体重. 我们尝试用批量梯度下降法,随机梯度下降法和小批量梯度下降法来对这 ...
- Spiral Matrix II leetcode java
题目: Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. ...
- 【Error】centos7 minimal connect: Network is unreachable
参考链接:http://www.centoscn.com/CentosBug/osbug/2015/1208/6500.html 由于centos7 和之前的版本差异比较大,之前的一些命令不能完全使用 ...
- JQuery效率问题
1,前言 我们开发了一个专题系统,生成了JSON的数据格式,采用JQuery动态插入HTML中,在前期的使用中,没有太大的问题,效率还可以接受,但是最近可能由于网络加之页面设计问题,我们的JS效率比较 ...
- 【Spark】提交Spark任务-ClassNotFoundException-错误处理
提交Spark任务-ClassNotFoundException-错误处理 Overview - Spark 2.2.0 Documentation Spark Streaming - Spark 2 ...