`
yu120
  • 浏览: 80055 次
社区版块
存档分类
最新评论

各种Java加密算法

    博客分类:
  • Java
阅读更多

如基本的单向加密算法:  

  • BASE64 严格地说,属于编码格式,而非加密算法

  • MD5(Message Digest algorithm 5,信息摘要算法)

  • SHA(Secure Hash Algorithm,安全散列算法)

  • HMAC(Hash Message Authentication Code,散列消息鉴别码)


    复杂的对称加密(DES、PBE)、非对称加密算法: 

  • DES(Data Encryption Standard,数据加密算法)

  • PBE(Password-based encryption,基于密码验证)

  • RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

  • DH(Diffie-Hellman算法,密钥一致协议)

  • DSA(Digital Signature Algorithm,数字签名)

  • ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)



    本篇内容简要介绍BASE64MD5SHAHMAC几种方法。 
    MD5SHAHMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。 

BASE64 
按 照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 
常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。 

各种Java加密算法 

通过java代码实现如下:

/**
	 * BASE64解密
	 * 
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] decryptBASE64(String key) throws Exception {
		return (new BASE64Decoder()).decodeBuffer(key);
	}

	/**
	 * BASE64加密
	 * 
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static String encryptBASE64(byte[] key) throws Exception {
		return (new BASE64Encoder()).encodeBuffer(key);
	}

 主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。 


MD5 
MD5 -- message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都 是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文 件是否一致的。 

各种Java加密算法 

通过java代码实现如下:

/**
	 * MD5加密
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptMD5(byte[] data) throws Exception {

		MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
		md5.update(data);

		return md5.digest();

	}

 


通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串。 

SHA 
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了, 但是SHA仍然是公认的安全加密算法,较之MD5更为安全。 

各种Java加密算法 

通过java代码实现如下:

/**
	 * SHA加密
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptSHA(byte[] data) throws Exception {

		MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
		sha.update(data);

		return sha.digest();

	}
}

 

/**
	 * 初始化HMAC密钥
	 * 
	 * @return
	 * @throws Exception
	 */
	public static String initMacKey() throws Exception {
		KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);

		SecretKey secretKey = keyGenerator.generateKey();
		return encryptBASE64(secretKey.getEncoded());
	}

	/**
	 * HMAC加密
	 * 
	 * @param data
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] encryptHMAC(byte[] data, String key) throws Exception {

		SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
		Mac mac = Mac.getInstance(secretKey.getAlgorithm());
		mac.init(secretKey);

		return mac.doFinal(data);

	}

 完整实例:

import java.security.MessageDigest;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 基础加密组件
 * 
 * @author 梁栋
 * @version 1.0
 * @since 1.0
 */
public abstract class Coder {
	public static final String KEY_SHA = "SHA";
	public static final String KEY_MD5 = "MD5";

	/**
	 * MAC算法可选以下多种算法
	 * 
	&nbsp;*&nbsp;<pre>
	&nbsp;*&nbsp;HmacMD5&nbsp;
	&nbsp;*&nbsp;HmacSHA1&nbsp;
	&nbsp;*&nbsp;HmacSHA256&nbsp;
	&nbsp;*&nbsp;HmacSHA384&nbsp;
	&nbsp;*&nbsp;HmacSHA512
	&nbsp;*&nbsp;</pre>
	&nbsp;*/
	public&nbsp;static&nbsp;final&nbsp;String&nbsp;KEY_MAC&nbsp;=&nbsp;"HmacMD5";

	/**
	&nbsp;*&nbsp;BASE64解密
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@param&nbsp;key
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;byte[]&nbsp;decryptBASE64(String&nbsp;key)&nbsp;throws&nbsp;Exception&nbsp;{
		return&nbsp;(new&nbsp;BASE64Decoder()).decodeBuffer(key);
	}

	/**
	&nbsp;*&nbsp;BASE64加密
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@param&nbsp;key
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;String&nbsp;encryptBASE64(byte[]&nbsp;key)&nbsp;throws&nbsp;Exception&nbsp;{
		return&nbsp;(new&nbsp;BASE64Encoder()).encodeBuffer(key);
	}

	/**
	&nbsp;*&nbsp;MD5加密
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@param&nbsp;data
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;byte[]&nbsp;encryptMD5(byte[]&nbsp;data)&nbsp;throws&nbsp;Exception&nbsp;{

		MessageDigest&nbsp;md5&nbsp;=&nbsp;MessageDigest.getInstance(KEY_MD5);
		md5.update(data);

		return&nbsp;md5.digest();

	}

	/**
	&nbsp;*&nbsp;SHA加密
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@param&nbsp;data
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;byte[]&nbsp;encryptSHA(byte[]&nbsp;data)&nbsp;throws&nbsp;Exception&nbsp;{

		MessageDigest&nbsp;sha&nbsp;=&nbsp;MessageDigest.getInstance(KEY_SHA);
		sha.update(data);

		return&nbsp;sha.digest();

	}

	/**
	&nbsp;*&nbsp;初始化HMAC密钥
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;String&nbsp;initMacKey()&nbsp;throws&nbsp;Exception&nbsp;{
		KeyGenerator&nbsp;keyGenerator&nbsp;=&nbsp;KeyGenerator.getInstance(KEY_MAC);

		SecretKey&nbsp;secretKey&nbsp;=&nbsp;keyGenerator.generateKey();
		return&nbsp;encryptBASE64(secretKey.getEncoded());
	}

	/**
	&nbsp;*&nbsp;HMAC加密
	&nbsp;*&nbsp;
	&nbsp;*&nbsp;@param&nbsp;data
	&nbsp;*&nbsp;@param&nbsp;key
	&nbsp;*&nbsp;@return
	&nbsp;*&nbsp;@throws&nbsp;Exception
	&nbsp;*/
	public&nbsp;static&nbsp;byte[]&nbsp;encryptHMAC(byte[]&nbsp;data,&nbsp;String&nbsp;key)&nbsp;throws&nbsp;Exception&nbsp;{

		SecretKey&nbsp;secretKey&nbsp;=&nbsp;new&nbsp;SecretKeySpec(decryptBASE64(key),&nbsp;KEY_MAC);
		Mac&nbsp;mac&nbsp;=&nbsp;Mac.getInstance(secretKey.getAlgorithm());
		mac.init(secretKey);

		return&nbsp;mac.doFinal(data);

	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics