1. 程式人生 > >Java利用 AES/ECB/PKCS5Padding 演算法加解密

Java利用 AES/ECB/PKCS5Padding 演算法加解密

Java利用  AES/ECB/PKCS5Padding 演算法加解密。

  1. package com.newland.njwpayment.utils;  
  2. import javax.crypto.Cipher;  
  3. import javax.crypto.spec.SecretKeySpec;  
  4. import Decoder.BASE64Decoder;  
  5. import Decoder.BASE64Encoder;  
  6. /** 
  7.  * AES加解密 
  8.  * 
  9.  * Created by yyh on 2015/10/9. 
  10.  */
  11. publicclass AESUtils {  
  12.     /** 
  13.      * 金鑰演算法
     
  14.      */
  15.     privatestaticfinal String ALGORITHM = "AES";  
  16.     /** 
  17.      * 加解密演算法/工作模式/填充方式 
  18.      */
  19.     privatestaticfinal String ALGORITHM_STR = "AES/ECB/PKCS5Padding";  
  20.     /** 
  21.      * SecretKeySpec類是KeySpec介面的實現類,用於構建祕密金鑰規範 
  22.      */
  23.     private SecretKeySpec key;  
  24.     public AESUtils(String hexKey) {  
  25.         key = new SecretKeySpec(hexKey.getBytes(), ALGORITHM);  
  26.     }  
  27.     /** 
  28.      * AES加密 
  29.      * @param data 
  30.      * @return 
  31.      * @throws Exception 
  32.      */
  33.     public String encryptData(String data) throws Exception {  
  34.         Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 建立密碼器
  35.         cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
  36.         returnnew BASE64Encoder().encode(cipher.doFinal(data.getBytes()));  
  37.     }  
  38.     /** 
  39.      * AES解密 
  40.      * @param base64Data 
  41.      * @return 
  42.      * @throws Exception 
  43.      */
  44.     public String decryptData(String base64Data) throws Exception{  
  45.         Cipher cipher = Cipher.getInstance(ALGORITHM_STR);  
  46.         cipher.init(Cipher.DECRYPT_MODE, key);  
  47.         returnnew String(cipher.doFinal(new BASE64Decoder().decodeBuffer(base64Data)));  
  48.     }  
  49.     /** 
  50.      * hex字串 轉 byte陣列 
  51.      * @param s 
  52.      * @return 
  53.      */
  54.     privatestaticbyte[] hex2byte(String s) {  
  55.         if (s.length() % 2 == 0) {  
  56.             return hex2byte (s.getBytes(), 0, s.length() >> 1);  
  57.         } else {  
  58.             return hex2byte("0"+s);  
  59.         }  
  60.     }  
  61.     privatestaticbyte[] hex2byte (byte[] b, int offset, int len) {  
  62.         byte[] d = newbyte[len];  
  63.         for (int i=0; i<len*2; i++) {  
  64.             int shift = i%2 == 1 ? 0 : 4;  
  65.             d[i>>1] |= Character.digit((char) b[offset+i], 16) << shift;  
  66.         }  
  67.         return d;  
  68.     }  
  69.     publicstaticvoid main(String[] args) throws Exception {  
  70.         AESUtil util = new AESUtil("abcdefghijklmnop"); // 金鑰
  71.         System.out.println("cardNo:"+util.encryptData("1234")); // 加密
  72.         System.out.println("exp:"+util.decryptData("34+Jzs4KkwaCQWVyyAgwLA==")); // 解密
  73.     }  
  74. }  

其中,BASE64Decoder與BASE64Encoder這兩個類可以通過Jre System Library下面的rt.jar找到,這裡順便提及一下,sun.misc.BASE64Encoder找不到jar包的兩種解決方法:

1、直接新增JRE System Library,在Eclipse裡面專案右擊->Java build path->JRE System Library...

另外,還需要注意的是,AES金鑰一般是16個位元組為一塊,然後對這一整塊進行加密,如果不夠16個位元組,就需要補位,也就是16位元組對齊。

相關推薦

Java利用 AES/ECB/PKCS5Padding 演算法解密

Java利用  AES/ECB/PKCS5Padding 演算法加解密。 package com.newland.njwpayment.utils;   import javax.crypto.Cipher;   import javax.crypto.spec.

aes/cbc/pkcs5padding/128解密

//******aes/cbc/pkcs5padding/128加解密****** private function aesEncrypt($data,$iv=''){ $enc_key = 'KlW';//隨機生成16為由大小寫字元和數字組成的字串

Openssl aes對稱加密演算法 解密例程 1

前面我們用openssl的aes256對稱加密演算法對16個位元組的記憶體塊進行了的加解密運算測試,現在更進一步,對指定大小的記憶體塊進行加解密運算。 首先明確一下aes是分組加密演算法,且每次加密的記憶體塊是16個位元組,所以,我們需要加密的記憶體塊必須是16個位元組的整數倍,若不是,則需要進行補齊。

記一個加密演算法 java 3DES (DESede/ECB/PKCS5Padding) 解密

對接一個介面,需要用到DESede/ECB/PKCS5Padding 進行加密, 剛開始以為很牛逼... 上程式碼 private static Cipher DES_CIPHER; s

java aes128位 cfb與gcm解密 aes-128-cfb aes-128-gcm

Base64.encodeBase64String(secretKey.getEncoded())是apache的commons-codec庫,二進位制經base64編碼為字串 //cfb package com.dddd.codec; import org.apache.comm

RSA演算法解密(JAVA)

/** * RSA加密演算法的演示驗證 * RSA是一種分組加密演算法 * 注意:金鑰對採用的長度決定了加密塊的長度,我這裡取的是2048,即256byte * 由於加密塊的長度固定為256,因此明文的長度至多為256 - 11 = 245byte * 我這裡明文

node.js AES/ECB/PKCS5Padding 與其他語言的加密解密通用

轉載:http://yijiebuyi.com/blog/13e2ae33082ac12ba4946b033be04bb5.html 關於什麼是AES? 需要自己goole瞭解一下,今天就是簡單和大家分享node.js下使用 AES/ECB/PKCS5Padding 如

java加密之AES/ECB/PKCS5Padding

廢話不多說,直接上程式碼 1.先建立一個base64編碼類, 實際專案中不用自己寫,有成熟的實現方法 package com.taikang; public final class Base64 { static private final in

JS實現AES/ECB/PKCS5Padding加密,MD5摘要作為key

庫用的是CryptoJSv3.1.2,這裡面遇到一些坑。 1.引用問題。 呼叫這個庫,老是報錯,查來查去,原來跟檔案引用的順序有關,程式碼如下 <!-- DO NOT CHANGE THE POSITION OF THE FILE BELOW- AES r

AES 對稱加密演算法 加密\解密例項

package com.soufun.com; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuc

PHP7 openssl 實現 AES/ECB/PKCS5Padding加密

class CryptAES { /** * var string $method 加解密方法,可通過openssl_get_cipher_methods()獲得 */ protected $method; /**

vue中使用AES加密(AES/ECB/PKCS5Padding

       前端專案中遇到需要對登入密碼進行AES/ECB/PKCS5Padding加密,然後呼叫登入介面,傳入密碼,使用者名稱。現將實現方法,記錄下來。 第一步: 安裝crypto-js         vue專案中執行npm install crypto-js --

openresty用AES/ECB/NoPadding 128位解密

--ECB 方式無需iv,傳遞一個16位元組的iv以便用原始key進行EVP_DecryptInit_ex初始化local price_decode = aes:new(key,nil,aes.cipher(128,"ecb"),{iv=dspkey})local base_decode_bytes = ng

Java 加密 AES 對稱加密演算法

【AES】 一種對稱加密演算法,DES的取代者。 【程式碼】 程式碼比較多,有一部分非本文章內容程式碼,具體自己看吧。 package com.uikoo9.util.encrypt; import java.math.BigInteger; import java

Java與C#互動DES演算法加密解密資料

    要加密結果一樣,其實很簡單,只要IV值和金鑰一樣,出來的結果應該都是一樣的。     C#的DES加密解密演算法:金鑰長度為8 public static string Encode(string encryptString, string encryptKey)

RSA演算法解密---crypto++庫和OpenSSL庫

1. OpenSSL庫 a、 方式一: #include<string.h>#include <openssl/rsa.h>#pragma comment(lib,"libeay32.lib")#pragma comment(lib,"ssleay3

JAVA SHA-1加密及DES解密

//獲取祕鑰 public static SecretKey readKey(){ try { String skey = "XXXXXXXXXXXXXXX"; byte[] bs = skey.getBytes("UTF8"); //建立DESKeySpec物件

SM2非對稱演算法解密

在前面文章我們已經可以製作SM2證書了,主要應用了SM2簽名驗證演算法和SM3摘要演算法,在本文中主要介紹SM2公鑰加密演算法。這裡我們使用SM2數字證書來做SM2非對稱加密,然後使用硬體加密裝置做解密,比如加密檔案只能由指定的智慧密碼鑰匙UKey才能解開。 SM2加

Golang實現AES/CBC/PKCS5Padding演算法

使用golang實現AES演算法很簡單,系統庫中已自帶了CBC、CFB等等許多加密模式,而且可以很方便的設定IVPara,但是前幾日在做AES加密時,發現傳入的key必須是128bit、192bit或256bit,記得當時用Java實現的時候並沒有這個問題。AES中的key的

VC 使用Cryptography 微軟自帶演算法解密檔案

// Encrypting_a_File.cpp : Defines the entry point for the console // application. // #include <tchar.h> #include <stdio.h>