1 importjavax.crypto.Cipher;2 importjavax.crypto.KeyGenerator;3 importjavax.crypto.SecretKey;4 importorg.apache.commons.codec.binary.Base64;5 importorg.bouncycastle.jce.provider.BouncyCastleProvider;6
7
8
9 importjavax.crypto.Cipher;10 importjavax.crypto.KeyGenerator;11 importjavax.crypto.SecretKey;12 importjavax.crypto.spec.SecretKeySpec;13 importjava.security.Key;14 importjava.security.Security;15
16
17 public class IDEA implementsalgorithm{18 public voidspeak(String value) {19 String data = "20173599 周博";20 data=value;21 String key =getKey();22 System.out.println("要加密的原文:"+data);23 System.out.println("密钥:" +key);24 String data_en =ideaEncrypt(data, key);25 System.out.println("密文:"+data_en);26 String data_de =ideaDecrypt(data_en, key);27 System.out.println("原文:"+data_de);28 }29
30 public static final String KEY_ALGORITHM="IDEA";31
32 public static final String CIPHER_ALGORITHM="IDEA/ECB/ISO10126Padding";33 public static byte[] initkey() throwsException{34 //加入bouncyCastle支持
35 Security.addProvider(newBouncyCastleProvider());36
37 //实例化密钥生成器
38 KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM);39 //初始化密钥生成器,IDEA要求密钥长度为128位
40 kg.init(128);41 //生成密钥
42 SecretKey secretKey=kg.generateKey();43 //获取二进制密钥编码形式
44 returnsecretKey.getEncoded();45 }46 /**
47 * 转换密钥48 *@paramkey 二进制密钥49 *@returnKey 密钥50 **/
51 private static Key toKey(byte[] key) throwsException{52 //实例化DES密钥53 //生成密钥
54 SecretKey secretKey=newSecretKeySpec(key,KEY_ALGORITHM);55 returnsecretKey;56 }57
58 /**
59 * 加密数据60 *@paramdata 待加密数据61 *@paramkey 密钥62 *@returnbyte[] 加密后的数据63 **/
64 private static byte[] encrypt(byte[] data,byte[] key) throwsException{65 //加入bouncyCastle支持
66 Security.addProvider(newBouncyCastleProvider());67 //还原密钥
68 Key k=toKey(key);69 //实例化
70 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);71 //初始化,设置为加密模式
72 cipher.init(Cipher.ENCRYPT_MODE, k);73 //执行操作
74 returncipher.doFinal(data);75 }76 /**
77 * 解密数据78 *@paramdata 待解密数据79 *@paramkey 密钥80 *@returnbyte[] 解密后的数据81 **/
82 private static byte[] decrypt(byte[] data,byte[] key) throwsException{83 //加入bouncyCastle支持
84 Security.addProvider(newBouncyCastleProvider());85 //还原密钥
86 Key k =toKey(key);87 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);88 //初始化,设置为解密模式
89 cipher.init(Cipher.DECRYPT_MODE, k);90 //执行操作
91 returncipher.doFinal(data);92 }93 public staticString getKey(){94 String result = null;95 try{96 result =Base64.encodeBase64String(initkey());97 } catch(Exception e) {98 e.printStackTrace();99 }100 returnresult;101 }102 public staticString ideaEncrypt(String data, String key) {103 String result = null;104 try{105 byte[] data_en =encrypt(data.getBytes(), Base64.decodeBase64(key));106 result =Base64.encodeBase64String(data_en);107 } catch(Exception e) {108 e.printStackTrace();109 }110 returnresult;111 }112
113 public staticString ideaDecrypt(String data, String key) {114 String result = null;115 try{116 byte[] data_de =decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));;117 result = newString(data_de);118 } catch(Exception e) {119 e.printStackTrace();120 }121 returnresult;122 }123
124
125
126
127 public static voidmain(String[] args) {128 //TODO Auto-generated method stub
129 System.out.println("IDEA加密算法");130 IDEA idea=newIDEA();131 try
132 {133 idea.speak("20173599 周博");134 }135 catch(Exception e)136 {137 System.out.println(e.getMessage());138 }139 }140
141 }