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和数据摘要算法
对加密解密下面的内容一定要先理解: 甲乙双方要通信,中间的连接可能被人窃听甚至篡改.解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容. 加密时,甲乙双方可以约定 ...
随机推荐
- SharePoint Online 设置网站集
前言 本文介绍如何在Office 365中设置SharePoint Online网站集,当我们创建好SharePoint Online站点,开始使用之前,一定会有一些基本的设置,本文就为大家介绍这些基 ...
- 毒枭第一季/全集Narcos迅雷下载
英文全名Narcos,第1季(2015)Netflix.本季看点:<缉毒特警>该剧再现了上世纪八十年代末期警方与臭名昭著的大毒枭激烈交战的真实故事.律师.法官.政客.警察.军队甚至平民全都 ...
- 关于MySQL的行转列的简单应用
sql 脚本 -- 创建表 学生表 CREATE TABLE `student` ( `stuid` VARCHAR(16) NOT NULL COMMENT '学号', `stunm` VARCHA ...
- [Web 前端] 使用yarn代替npm作为node.js的模块管理器
cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency managemen ...
- CSS3 Flex布局整理(一)
一.说明 1.在以往的布局方案中,都是基于盒装模型,依赖display属性+position属性+float属性等. 他对于那些特殊布局非常不方便,比如,垂直居中等. 并且不同浏览器的盒模型还有些差异 ...
- Asp.Net Core 静态文件目录操作
一.默认静态文件处理 Asp.Net Core的默认处理方式,将所有的静态文件都放在wwwroot文件夹中 1.默认配置,在启动文件Startup中 public void Configure(IAp ...
- LaTeX技巧:LaTeX括号总结
功能 语法 显示 不好看 ( \frac{1}{2} ) 好一点 \left( \frac{1}{2} \right) 您可以使用\left和\right来显示不同的括号: 功能 语法 显示 ...
- Mediator 中介者 MD
中介者模式 简介 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介者模式也称为调解者模式或者调停者模式. 当程序存在大 ...
- 大数据开发实战:Stream SQL实时开发二
1.介绍 本节主要利用Stream SQL进行实时开发实战,回顾Beam的API和Hadoop MapReduce的API,会发现Google将实际业务对数据的各种操作进行了抽象,多变的数据需求抽象为 ...
- LSTM 文本情感分析/序列分类 Keras
LSTM 文本情感分析/序列分类 Keras 请参考 http://spaces.ac.cn/archives/3414/ neg.xls是这样的 pos.xls是这样的neg=pd.read_e ...