在工作中会经常遇到密码加密,URL传参要进行加密,在此我参照一个例子将用java实现的AES加解密程序用实例写出。具体的参照可以参照如下的链接http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html
首先给出具体的加解密代码,
AESencrp.java
package com.security; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 用来进行AES的加密和解密程序 * * @author Steven * */ public class AESencrp { // 加密算法 private String ALGO; // 加密密钥 // private static final byte[] keyValue = new byte[] { 'T', 'h', 'e', // 'B','e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y' }; // 16位的加密密钥 private byte[] keyValue; /** * 用来进行加密的操作 * * @param Data * @return * @throws Exception */ public String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.ENCRYPT_MODE, key); byte[] encVal = c.doFinal(Data.getBytes()); String encryptedValue = new BASE64Encoder().encode(encVal); return encryptedValue; } /** * 用来进行解密的操作 * * @param encryptedData * @return * @throws Exception */ public String decrypt(String encryptedData) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.DECRYPT_MODE, key); byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData); byte[] decValue = c.doFinal(decordedValue); String decryptedValue = new String(decValue); return decryptedValue; } /** * 根据密钥和算法生成Key * * @return * @throws Exception */ private Key generateKey() throws Exception { Key key = new SecretKeySpec(keyValue, ALGO); return key; } public String getALGO() { return ALGO; } public void setALGO(String aLGO) { ALGO = aLGO; } public byte[] getKeyValue() { return keyValue; } public void setKeyValue(byte[] keyValue) { this.keyValue = keyValue; } }这个是主要的加解密代码,而测试代码如下所示:
Checker.java
package com.security; /** * * @author Steven * */ public class Checker { public static void main(String[] args) throws Exception { // 创建加解密 AESencrp aes = new AESencrp(); // 设置加解密算法 aes.setALGO("AES"); // 设置加解密密钥 aes.setKeyValue("4E7FF1C1F04F4B36".getBytes()); // 要进行加密的密码 String password = "cat123@#steven"; // 进行加密后的字符串 String passwordEnc = aes.encrypt(password); String passwordDec = aes.decrypt(passwordEnc); System.out.println("原来的密码 : " + password); System.out.println("加密后的密码 : " + passwordEnc); System.out.println("解密后的原密码 : " + passwordDec); } }
在将代码copy到自己的开发环境中会出现以下错误情况,如图1所示:
图1
sun.misc.BASE64Encoder找不到jar包的解决方法
此时可以通过以下方式解决:
到Myeclipse或者Eclipse中选择Window-->Preferences-->Java-->Compiler-->Error/Warnings.然后做如图2设置:
图2
然后进行以java application进行运行测试,最终的结果如下所示:
原来的密码 : cat123@#steven 加密后的密码 : YtJ1UpR0ZFA2SsKPv1i24g== 解密后的原密码 : cat123@#steven
这时候就可以在你的项目中使用加解密来保证数据的安全了。
在此恭祝大家学习愉快!