Java利用 AES/ECB/PKCS5Padding 演算法加解密
Java利用 AES/ECB/PKCS5Padding 演算法加解密。
- package com.newland.njwpayment.utils;
- import javax.crypto.Cipher;
- import javax.crypto.spec.SecretKeySpec;
- import Decoder.BASE64Decoder;
- import Decoder.BASE64Encoder;
- /**
- * AES加解密
- *
- * Created by yyh on 2015/10/9.
- */
- publicclass AESUtils {
- /**
-
* 金鑰演算法
- */
- privatestaticfinal String ALGORITHM = "AES";
- /**
- * 加解密演算法/工作模式/填充方式
- */
- privatestaticfinal String ALGORITHM_STR = "AES/ECB/PKCS5Padding";
- /**
- * SecretKeySpec類是KeySpec介面的實現類,用於構建祕密金鑰規範
- */
- private SecretKeySpec key;
-
public AESUtils(String hexKey) {
- key = new SecretKeySpec(hexKey.getBytes(), ALGORITHM);
- }
- /**
- * AES加密
- * @param data
- * @return
- * @throws Exception
- */
- public String encryptData(String data) throws Exception {
- Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 建立密碼器
-
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
- returnnew BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
- }
- /**
- * AES解密
- * @param base64Data
- * @return
- * @throws Exception
- */
- public String decryptData(String base64Data) throws Exception{
- Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
- cipher.init(Cipher.DECRYPT_MODE, key);
- returnnew String(cipher.doFinal(new BASE64Decoder().decodeBuffer(base64Data)));
- }
- /**
- * hex字串 轉 byte陣列
- * @param s
- * @return
- */
- privatestaticbyte[] hex2byte(String s) {
- if (s.length() % 2 == 0) {
- return hex2byte (s.getBytes(), 0, s.length() >> 1);
- } else {
- return hex2byte("0"+s);
- }
- }
- privatestaticbyte[] hex2byte (byte[] b, int offset, int len) {
- byte[] d = newbyte[len];
- for (int i=0; i<len*2; i++) {
- int shift = i%2 == 1 ? 0 : 4;
- d[i>>1] |= Character.digit((char) b[offset+i], 16) << shift;
- }
- return d;
- }
- publicstaticvoid main(String[] args) throws Exception {
- AESUtil util = new AESUtil("abcdefghijklmnop"); // 金鑰
- System.out.println("cardNo:"+util.encryptData("1234")); // 加密
- System.out.println("exp:"+util.decryptData("34+Jzs4KkwaCQWVyyAgwLA==")); // 解密
- }
- }
其中,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>