Java加解密 Exception in thread "main" java.security.InvalidKeyException: Wrong key size


Exception in thread "main" java.security.InvalidKeyException: Wrong key size

Exception in thread "main" java.security.InvalidKeyException: 6 length 。。(忘了是啥了)

出現以上異常注意啦:

DES加密,只允許密鑰是8個字節的。

AES加密,密鑰必須是16個字節的.

也就是說 key=“12345678”可以,key="123456789"就會報錯。

DES

  public static void main(String[] args) throws Exception{
    //

      //原文
      String input = "硅谷";
      //定義key
      //使用DEs  密鑰必須是8個字節
      String key = "12345611";
      //算法
       String  transformation = "DES";
       //加密類型
      String  algorithm = "DES";
      //創建加密對像
       Cipher cipher=Cipher.getInstance(transformation);
      //創建加密規則
      //第一個參數:key的字節碼   第二個參數:加密類型
      SecretKeySpec secretKeySpec =new SecretKeySpec(key.getBytes(),algorithm);
        //加密初始化
       cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec);
       //調用加密方法
        byte[] bytes=cipher.doFinal(input.getBytes());
    // 查看密文
    System.out.println(new String(bytes));

  }

AES

  public static void main(String[] args) throws Exception{
    //

      //原文
      String input = "硅谷";
      //定義key
      //使用DEs  密鑰必須是8個字節
      //使用AES  密鑰必須是16個字節
      String key = "1234561112345678";
      //算法
       String  transformation = "AES";
       //加密類型
      String  algorithm = "AES";
      //創建加密對像
       Cipher cipher=Cipher.getInstance(transformation);
      //創建加密規則
      //第一個參數:key的字節碼   第二個參數:加密類型
      SecretKeySpec secretKeySpec =new SecretKeySpec(key.getBytes(),algorithm);
        //加密初始化
       cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec);
       //調用加密方法
        byte[] bytes=cipher.doFinal(input.getBytes());
    // 查看密文
    System.out.println(new String(bytes));

  }

  RSA

  public static void main(String[] args) throws Exception {

      String input = "阿拉蕾";
      String algorithm = "RSA";
      KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance(algorithm);
      //生成密鑰對
      KeyPair keyPair = keyPairGenerator.generateKeyPair();
      //生成公鑰
      PublicKey publicKey = keyPair.getPublic();
      //生成私鑰
      PrivateKey privateKey = keyPair.getPrivate();
      //獲取字節數組
      byte[] privateencoded = privateKey.getEncoded();
      byte[] publicencoded = publicKey.getEncoded();

    // 使用base64  轉碼
      String privateKeyEncoded = String.valueOf(Base64.encode(privateencoded));
      String publicKeyEncoded = String.valueOf(Base64.encode(publicencoded));
      //打印
    System.out.println(privateKeyEncoded);
    System.out.println(publicKeyEncoded);

    //創建加密方式
      Cipher cipher = Cipher.getInstance(algorithm);
      //密匙加密
      cipher.init(Cipher.ENCRYPT_MODE,privateKey);
      byte[] bytes = cipher.doFinal(input.getBytes());
      System.out.println("加密轉碼:"+Base64.encode(bytes));


      //公鑰解密
      cipher.init(Cipher.DECRYPT_MODE,publicKey);
      byte[] bytes1 = cipher.doFinal(bytes);
      //注意解碼用 new String()方法裝字節數組
    System.out.println("解密:"+new String(bytes1));



  }

  

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM