java DES加解密及Wrong key size錯誤


如下的DES加密方法會報錯:Wrong key size

 

    public static String encryptDES(String source) throws Exception{
        SecretKeySpec skeySpec = new SecretKeySpec(ckplayerkey.getBytes(), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(source.getBytes("utf8"));
        String data=Base64.encodeBase64String(encrypted);
        return data;
    }


一開始以為將AES加密方法中的關鍵字直接改為DES就是DES加密了,沒想到報錯 Wrong key size,因為前端是用cryptojs加密的,所以找到了一個答案:https://blog.csdn.net/king7950/article/details/70157463  根據該文章在java端加密成功~~

DES加密 關鍵代碼如下:

    /** * DES加密 */
    public static String encodeDES(String datasource){
        try{
            SecureRandom random = new SecureRandom();
            DESKeySpec desKey = new DESKeySpec(ckplayerkey.getBytes());
            //創建一個密匙工廠,然后用它把DESKeySpec轉換成
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey securekey = keyFactory.generateSecret(desKey);
            //Cipher對象實際完成加密操作
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            //用密匙初始化Cipher對象
            cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
            //現在,獲取數據並加密
            return Base64.encodeBase64String(cipher.doFinal(datasource.getBytes()));

        }catch(Throwable e){
            e.printStackTrace();
            return null;
        }
    }

 

DES解密代碼(未測試)如下:

/** * DES解密 */
public String decodeDES(String src) throws Exception {
    // DES算法要求有一個可信任的隨機數源
    SecureRandom random = new SecureRandom();
    // 創建一個DESKeySpec對象
    DESKeySpec desKey = new DESKeySpec(KEY.getBytes(CODE_TYPE));
    // 創建一個密匙工廠
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    // 將DESKeySpec對象轉換成SecretKey對象
    SecretKey securekey = keyFactory.generateSecret(desKey);
    // Cipher對象實際完成解密操作
    Cipher cipher = Cipher.getInstance("DES");
    // 用密匙初始化Cipher對象
    cipher.init(Cipher.DECRYPT_MODE, securekey, random);
    // 真正開始解密操作
    return IOUtils.toString(cipher.doFinal(Base64.decodeBase64(src)),"UTF-8");
}

 


免責聲明!

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



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