/////////////SHA单项加密
package com.security;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* SHA安全散列算法
* @author Administrator
*
*/
public class SecuritySHA {
/**
* md5加密
* @param s
* @return
*/
public static byte[] encrypt(String s)
{
try {
//根据MD5算法生成MessageDigest对象
MessageDigest md5 = MessageDigest.getInstance("SHA");
byte[] bytes = s.getBytes();
//使用bytes更新摘要
md5.update(bytes);
//完成哈希计算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public String decryption(byte[] bytes)
{
return null;
}
public static String byte2hex(byte[] b) // 二进制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
//一般MD5加密是32位,如果加上以下这句就是47位了,以下这句没任何用,只是为了好看
//if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] result = SecurityMD5.encrypt("郭克华_安全编码技术");
byte[] result1 = SecurityMD5.encrypt("郭克华_安全编码技术");
System.out.println(result);
System.out.println(result1);
System.out.println(new String(result));
System.out.println(new String(result1));
System.out.println(SecurityMD5.byte2hex(result));
System.out.println(SecurityMD5.byte2hex(result1));
}
}
/////////MD5单项加密
package com.security;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* MD5加密
* @author Administrator
*
*/
public class SecurityMD5 {
/**
* md5加密
* @param s
* @return
*/
public static byte[] encrypt(String s)
{
try {
//根据MD5算法生成MessageDigest对象
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = s.getBytes();
//使用bytes更新摘要
md5.update(bytes);
//完成哈希计算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public String decryption(byte[] bytes)
{
return null;
}
public static String byte2hex(byte[] b) // 二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] result = SecurityMD5.encrypt("sky");
byte[] result1 = SecurityMD5.encrypt("sky");
System.out.println(result);
System.out.println(result1);
System.out.println(new String(result));
System.out.println(new String(result1));
System.out.println(SecurityMD5.byte2hex(result));
System.out.println(SecurityMD5.byte2hex(result1));
}
}
/////////DES对称加密
package com.security;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/**
* DES是数据加密标准(Data Encryption Standard)的简称 //对称加密
* @author Administrator
*
*/
public class SecurityDES {
//KeyGenerator提供对称
private KeyGenerator keygen;
//SecretKey负责保存堆成密匙
private SecretKey deskey;
//Cipher负责完成加密和解密工作
private Cipher c;
//该字节数组负责保存加密的结果
private byte[] cipherByte;
public SecurityDES()
{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
//实例化支持DES算法的密匙生成器(算法名称需按规定,负责抛出异常)
keygen = KeyGenerator.getInstance("DES");
//生成密匙
deskey = keygen.generateKey();
//生成Cipher对象,指定其支持DES算法
c = Cipher.getInstance("DES");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 对指定字符串加密
* @param str
* @return
*/
public byte[] createEncryptor(String str)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
//加密,结果保存进cipherByte
cipherByte = c.doFinal(src);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
public byte[] createDecryptor(byte[] buff)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE 表示解密模式
c.init(Cipher.DECRYPT_MODE, deskey);
//得到明文,存入cipherByte字符数组
cipherByte = c.doFinal(buff);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SecurityDES des = new SecurityDES();
String msg = "sky人皇";
System.out.println("明文:"+msg);
byte[] enc = des.createEncryptor(msg);
System.out.println("密文:"+new String(enc));
byte[] dec = des.createDecryptor(enc);
System.out.println("解密:"+new String(dec));
}
}
////////////3DES对称加密
package com.security;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/**
* 3DES 即三重DES,是DES的加强版 //对称加密
* @author Administrator
*
*/
public class Security3DES {
//KeyGenerator提供对称
private KeyGenerator keygen;
//SecretKey负责保存堆成密匙
private SecretKey deskey;
//Cipher负责完成加密和解密工作
private Cipher c;
//该字节数组负责保存加密的结果
private byte[] cipherByte;
public Security3DES()
{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
//实例化支持DES算法的密匙生成器(算法名称需按规定,负责抛出异常)
keygen = KeyGenerator.getInstance("DESede");
//生成密匙
deskey = keygen.generateKey();
//生成Cipher对象,指定其支持DES算法
c = Cipher.getInstance("DESede");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 对指定字符串加密
* @param str
* @return
*/
public byte[] createEncryptor(String str)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
//加密,结果保存进cipherByte
cipherByte = c.doFinal(src);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
public byte[] createDecryptor(byte[] buff)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE 表示解密模式
c.init(Cipher.DECRYPT_MODE, deskey);
//得到明文,存入cipherByte字符数组
cipherByte = c.doFinal(buff);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SecurityDES des = new SecurityDES();
String msg = "sky人皇";
System.out.println("明文:"+msg);
byte[] enc = des.createEncryptor(msg);
System.out.println("密文:"+new String(enc));
byte[] dec = des.createDecryptor(enc);
System.out.println("解密:"+new String(dec));
}
}
////////////AES对称加密
package com.security;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/**
* AES 高级加密标准(Advanced Encryption Standard)的缩写 //对称加密
* @author Administrator
*
*/
public class SecurityAES {
//KeyGenerator提供对称
private KeyGenerator keygen;
//SecretKey负责保存堆成密匙
private SecretKey deskey;
//Cipher负责完成加密和解密工作
private Cipher c;
//该字节数组负责保存加密的结果
private byte[] cipherByte;
public SecurityAES()
{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
//实例化支持DES算法的密匙生成器(算法名称需按规定,负责抛出异常)
keygen = KeyGenerator.getInstance("AES");
//生成密匙
deskey = keygen.generateKey();
//生成Cipher对象,指定其支持DES算法
c = Cipher.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 对指定字符串加密
* @param str
* @return
*/
public byte[] createEncryptor(String str)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
//加密,结果保存进cipherByte
cipherByte = c.doFinal(src);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
public byte[] createDecryptor(byte[] buff)
{
try {
//根据密匙,对Cipher对象进行初始化,ENCRYPT_MODE 表示解密模式
c.init(Cipher.DECRYPT_MODE, deskey);
//得到明文,存入cipherByte字符数组
cipherByte = c.doFinal(buff);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cipherByte;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SecurityDES des = new SecurityDES();
String msg = "sky人皇";
System.out.println("明文:"+msg);
byte[] enc = des.createEncryptor(msg);
System.out.println("密文:"+new String(enc));
byte[] dec = des.createDecryptor(enc);
System.out.println("解密:"+new String(dec));
}
}