zoukankan      html  css  js  c++  java
  • IDEA加密算法(含所需jar包(commons-codec-1.11.jar ,bcprov-jdk15on-160.jar))

    软件设计上机实验IDEA算法:

      1 import javax.crypto.Cipher;
      2 import javax.crypto.KeyGenerator;
      3 import javax.crypto.SecretKey;
      4 import org.apache.commons.codec.binary.Base64;
      5 import org.bouncycastle.jce.provider.BouncyCastleProvider;
      6 
      7 
      8 
      9 import javax.crypto.Cipher;
     10 import javax.crypto.KeyGenerator;
     11 import javax.crypto.SecretKey;
     12 import javax.crypto.spec.SecretKeySpec;
     13 import java.security.Key;
     14 import java.security.Security;
     15 
     16 
     17 public class IDEA implements algorithm{
     18     public void speak(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() throws Exception{
     34             //加入bouncyCastle支持
     35             Security.addProvider(new BouncyCastleProvider());
     36 
     37             //实例化密钥生成器
     38             KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM);
     39             //初始化密钥生成器,IDEA要求密钥长度为128位
     40             kg.init(128);
     41             //生成密钥
     42             SecretKey secretKey=kg.generateKey();
     43             //获取二进制密钥编码形式
     44             return secretKey.getEncoded();
     45         }
     46         /**
     47          * 转换密钥
     48          * @param key 二进制密钥
     49          * @return Key 密钥
     50          * */
     51         private static Key toKey(byte[] key) throws Exception{
     52             //实例化DES密钥
     53             //生成密钥
     54             SecretKey secretKey=new SecretKeySpec(key,KEY_ALGORITHM);
     55             return secretKey;
     56         }
     57 
     58         /**
     59          * 加密数据
     60          * @param data 待加密数据
     61          * @param key 密钥
     62          * @return byte[] 加密后的数据
     63          * */
     64         private static byte[] encrypt(byte[] data,byte[] key) throws Exception{
     65             //加入bouncyCastle支持
     66             Security.addProvider(new BouncyCastleProvider());
     67             //还原密钥
     68             Key k=toKey(key);
     69             //实例化
     70             Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
     71             //初始化,设置为加密模式
     72             cipher.init(Cipher.ENCRYPT_MODE, k);
     73             //执行操作
     74             return cipher.doFinal(data);
     75         }
     76         /**
     77          * 解密数据
     78          * @param data 待解密数据
     79          * @param key 密钥
     80          * @return byte[] 解密后的数据
     81          * */
     82         private static byte[] decrypt(byte[] data,byte[] key) throws Exception{
     83             //加入bouncyCastle支持
     84             Security.addProvider(new BouncyCastleProvider());
     85             //还原密钥
     86             Key k =toKey(key);
     87             Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
     88             //初始化,设置为解密模式
     89             cipher.init(Cipher.DECRYPT_MODE, k);
     90             //执行操作
     91             return cipher.doFinal(data);
     92         }
     93         public static String getKey(){
     94             String result = null;
     95             try {
     96                 result = Base64.encodeBase64String(initkey());
     97             } catch (Exception e) {
     98                 e.printStackTrace();
     99             }
    100             return result;
    101         }
    102         public static String 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             return result;
    111         }
    112 
    113         public static String ideaDecrypt(String data, String key) {
    114             String result = null;
    115             try {
    116                 byte[] data_de =decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));;
    117                 result = new String(data_de);
    118             } catch (Exception e) {
    119                 e.printStackTrace();
    120             }
    121             return result;
    122         }
    123      
    124 
    125     
    126 
    127     public static void main(String[] args) {
    128         // TODO Auto-generated method stub
    129         System.out.println("IDEA加密算法");
    130         IDEA idea=new IDEA();
    131          try
    132          {    
    133              idea.speak("20173599 周博");
    134          }
    135          catch(Exception e)
    136          {
    137              System.out.println(e.getMessage());
    138          }
    139     }
    140 
    141 }
    IDEA算法

    jar包下载地址:

    https://pan.baidu.com/s/16YvZIXsGBRtFjQqrTAGvdQ

    提取密码:ynnz

  • 相关阅读:
    colemak,你用了吗?
    DELPHI一个对付内存汇漏的办法和技巧
    使用for in 循环数据集
    今天差点被断电搞死了,幸好IDE的备份救了我
    为什么继续选择DELPHI?
    无缘DELPHI的BUG
    DELPHI DOUBLE不解之迷
    失败的大牛事件委托,与我的委托
    2017-02-08 01:19:09 Scrapy: pk5_mylist
    2016-09-02 16:50:15 webqq 协议分析
  • 原文地址:https://www.cnblogs.com/smartisn/p/11600823.html
Copyright © 2011-2022 走看看