文档章节

Java加解密

素人派
 素人派
发布于 2016/12/31 20:44
字数 328
阅读 2
收藏 0
  • 介绍
本文介绍如何利用Java语言加密数据。
  • 对称加密
  • DES(Data Encryption Standard)
[codesyntax lang="java"]
/**
* Copyright © 1998-2015, surenpi.com All Rights Reserved.
*/
package org.suren.hibernate.util;

import java.io.ByteArrayOutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 * @author suren
 * @date 2015年11月24日 下午5:04:05
 */
public class Encryptor
{
	private KeyGenerator	keyGen;
	private SecretKey	key;
	private Cipher	cipher;
	private byte[]	cipherByte;
	
	public static final String ALG_DES = "DES";
	private static Encryptor encryptor;
	
	private Encryptor(){}
	
	private Encryptor(String algorithm) throws NoSuchAlgorithmException, NoSuchPaddingException
	{
		keyGen = KeyGenerator.getInstance(algorithm);
		key = keyGen.generateKey();
		
		cipher = Cipher.getInstance(algorithm);
	}
	
	public static Encryptor getInstance(String algorithm) throws NoSuchAlgorithmException, NoSuchPaddingException
	{
		if(encryptor == null)
		{
			encryptor = new Encryptor(algorithm);
		}
		
		return encryptor;
	}
	
	public byte[] encrypt(String str) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException
	{
		cipher.init(Cipher.ENCRYPT_MODE, key);
		cipherByte = cipher.doFinal(str.getBytes());
		return cipherByte;
	}
	
	public String encryptStr(String str) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException
	{
		byte[] encryptArray = encrypt(str);
		
		StringBuffer strBuf = new StringBuffer();
		for(byte e : encryptArray)
		{
			strBuf.append(intToChar((e >> 4) & 0x0f));
			strBuf.append(intToChar(e & 0x0f));
		}
		
		return strBuf.toString();
	}
	
	public byte[] decrypt(byte[] buf) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException
	{
		cipher.init(Cipher.DECRYPT_MODE, key);
		cipherByte = cipher.doFinal(buf);
		return cipherByte;
	}
	
	public String decryptStr(byte[] buf) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException
	{
		return new String(decrypt(buf));
	}
	
	/**
	 * decrypt string
	 * @see #encryptStr(String)
	 * @param encryptStr
	 * @return
	 * @throws InvalidKeyException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws NullPointerException if encryptStr is null
	 */
	public String decryptStr(String encryptStr) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException
	{
		if(encryptStr == null)
		{
			throw new NullPointerException();
		}
		
		encryptStr = encryptStr.toUpperCase();
		
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		int len = encryptStr.length();
		for(int i = 0; i < len; i += 2)
		{
			int b = ((charToByte(encryptStr.charAt(i)) << 4) & 0xff) | charToByte(encryptStr.charAt(i + 1));
			byteOut.write(b);
		}
		
		return decryptStr(byteOut.toByteArray());
	}
	
	private byte charToByte(char c)
	{
		return (byte) "0123456789ABCDEF".indexOf(c);
	}
	
	private char intToChar(int b)
	{
		return "0123456789ABCDEF".charAt(b);
	}
	
	public void clean()
	{
		cipherByte = null;
	}
}
[/codesyntax]
  • 3DES
  • AES(Advanced Encryption Standard)
  • BASE64
  • 非对称加密
  • RSA
  • DSA(Digital Signature Algorithm)
  • 参考
http://www.iteye.com/topic/1122076/

本文转载自:http://surenpi.com/2015/11/27/java%e5%8a%a0%e8%a7%a3%e5%af%86/

上一篇: Struts2的插件机制
下一篇: 常用Eclipse插件
素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问

暂无文章

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
21分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
24分钟前
4
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
47分钟前
3
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
47分钟前
3
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部