java Aes256 密碼編譯演算法的實現,javaaes256

來源:互聯網
上載者:User

java Aes256 密碼編譯演算法的實現,javaaes256

如果希望進行AES256位的加密解密,需要事先從java官網下載 local_policy.jar與US_export_policy.jar替換%JAVA_HOME%/jre/lib/security的兩個policy檔案,local_policy.jar與US_export_policy .jar。 主要是為了突破AES演算法只能支援到128位的限制。如果未替換,可能會得到如下錯誤: *

 

java.security.InvalidKeyException: Illegal key   package com.jlins; import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import com.jlins.util.Hex; /** * java Aes256 加密 * * @author jlins * */ public class Aes256Encryptor { // 說明 key 需要大家自己去設定加密解密的key,key牽涉到安全資訊,所以這裡無法公布     private static final byte[] key = {};     private static final String transform = "AES/CBC/NoPadding";     private static final String algorithm = "AES";     private static final SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);     public static void main(String[] args) throws Exception {          String pwds[] = { "123", "0123456789012345", "01234567890123456", "123", "123", "0123456789012345678",                             "012345678901234567890123456789", "b", "0123456789012345", "01234567890123456", "012345678901234567" };         String ivss[] = { "test", "test", "test", "test0123456789012", "test01234567890123", "test", "test", "a",                         "test", "test", "test" };         String rr[] = new String[ivss.length];          for (int i = 0; i < ivss.length; i++) {             String en = encrypt(pwds[i], ivss[i]);             String decy = decrypt(en, ivss[i]);             rr[i] = "[" + ivss[i] + "],[" + decy + "]-->[" + en + "]";             System.out.println(rr[i]);            }            System.out.println("---------");            for (int i = 0; i < rr.length; i++) {                System.out.println(rr[i]);             } } /** */ public static String decrypt(String pHexText, String pIv) throws Exception {         Cipher cipher = Cipher.getInstance(transform);         byte[] encryptedBytes = Hex.decode(pHexText);         byte[] iv = createIV(pIv);         cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));         byte[] decryptedBytes = cipher.doFinal(encryptedBytes);         System.arraycopy(decryptedBytes, 0, encryptedBytes, 0, encryptedBytes.length);         String result = new String(encryptedBytes);         return result.trim(); } /** */ public static String encrypt(String pData, String pIv) throws Exception {          Cipher cipher = Cipher.getInstance(transform);          byte[] iv = createIV(pIv);          cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));          byte[] output = cipher.doFinal(paddingData(pData));          byte[] encryptedContent = new byte[output.length];          System.arraycopy(output, 0, encryptedContent, 0, encryptedContent.length);          String result = new String(Hex.encode(encryptedContent)).toUpperCase();          return result; } /** * 補齊的16位的整數倍 * * @param pData * @return */ private static byte[] paddingData(String pData) {        byte[] bytes = pData.getBytes();        int length = bytes.length / 16;        if (length * 16 < bytes.length) {           length++;         }        byte[] result = new byte[length * 16];        System.arraycopy(bytes, 0, result, 0, bytes.length);        for (int i = bytes.length; i < result.length; i++) {          result[i] = 0x00;         }         return result;         } /** * 初始化向量到16位 * */        private static byte[] createIV(String pIv) throws UnsupportedEncodingException {        byte[] bytes = pIv.getBytes("US-ASCII");        int length = bytes.length / 16;        if (length * 16 < bytes.length) {        length++;        }        byte[] result = new byte[16];        System.arraycopy(bytes, 0, result, 0, bytes.length > 16 ? 16 : bytes.length);        for (int i = bytes.length; i < result.length; i++) {        result[i] = 0x00;       }       return result; } }

 

原文地址:http://www.itmmd.com/201411/98.html
該文章由 android開發 整理髮布,轉載須標明出處。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.