首页
诗词
字典
板报
句子
名言
友答
励志
学校
网站地图
编程
C++
C语言
C++ Builder
VB
PB
Ruby Rails
perl python
编程
其他开发语言
VBA
VC/MFC
当前位置:
首页
>
教程频道
>
开发语言
>
编程
>
Java加密技术(1)
2012-12-24
Java加密技术(一)加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,
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的倍数,如果不够位数以
=
符号填充。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再加密一把,得到相应的字符串。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
Java代码
/**?
?*?初始化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);??
??
}??
给出一个完整类,如下:Java代码
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算法可选以下多种算法?
?????*??
?????*?<pre>?
?????*?HmacMD5??
?????*?HmacSHA1??
?????*?HmacSHA256??
?????*?HmacSHA384??
?????*?HmacSHA512?
?????*?</pre>?
?????*/??
????public?static?final?String?KEY_MAC?=?"HmacMD5";??
??
????/**?
?????*?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);??
????}??
??
????/**?
?????*?MD5加密?
?????*??
?????*?@param?data?
?????*?@return?
?????*?@throws?Exception?
?????*/??
????public?static?byte[]?encryptMD5(byte[]?data)?throws?Exception?{??
border-left: #d1d7dc 1px solid; padding-bottom: 0px; line-height: 18px; backgro
查看更多
下一篇
本文网址:
https://www.reader8.net/jiaocheng/20121224/1828359.html
读书人精选
热点排行
maven 项目平添Maven Dependencies Libr
java类静态域、块,非静态域、块,结构函
Golang的slice圈套
Spring2 兑现AOP编程的两种实现方法
树的底层实现(下)
多线程程序的评量基准
struts2札记之第七讲
jquery 用ID取某个元素上的某个ID元素
资料搜索器
Java基础1 加载资源