1. 程式人生 > >AES加密,解密封裝。以及解密異常解決

AES加密,解密封裝。以及解密異常解決

//加入第二個引數後解決了,解密時pad block corrupted的異常
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");
        sr.setSeed(seed);
        kgen.init(128, sr); // 192 and 256 bits may not be available
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        return raw;
    }


    private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
    }


    private static byte[] decrypt(byte[] raw, byte[] encrypted)
            throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
    }


    public static String toHex(String txt) {
        return toHex(txt.getBytes());
    }


    public static String fromHex(String hex) {
        return new String(toByte(hex));
    }


    public static byte[] toByte(String hexString) {
        int len = hexString.length() / 2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
            result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
                    16).byteValue();
        return result;
    }


    public static String toHex(byte[] buf) {
        if (buf == null)
            return "";
        StringBuffer result = new StringBuffer(2 * buf.length);
        for (int i = 0; i < buf.length; i++) {
            appendHex(result, buf[i]);
        }
        return result.toString();
    }


    private static void appendHex(StringBuffer sb, byte b) {
        sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
    }
}

相關推薦

AES加密解密封裝以及解密異常解決

//加入第二個引數後解決了,解密時pad block corrupted的異常         SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");         sr.setSeed(seed);         kgen.ini

java使用AES加密c++使用crypto++解密

最近在做一個專案,需要用到加密解密,java端用AES加密了,準備把加好密的資料傳送到c++寫的服務端(crypto++開源庫)。搞了幾天,從不會到會,配置差點把我搞瘋了,太它媽的蛋疼。 編譯器:vs2017 我用的是cryptopp-CRYPTOPP_7_0_0這個

前端用CryptoJS類庫的AES加密後端解密不出來

由於後臺java使用AES加密使用的是AES/EBC/PKCS5Padding進行初始化的, 1、首先var key = CryptoJS.enc.Utf8.parse(key); 2、由於後端用的PKCS5Padding,而CryptoJS類庫類庫中沒有,但有PKCS7Padding,跟PKCS5Pad

AES加密128-192-256方案二

與方案一對比,方案二要簡潔很多。 看程式碼: package com.xiao.aes.util; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.cryp

AES加密128-192-256方案一

AES加密。 直接貼上程式碼,異常什麼的自己要處理,做個總結記錄 package com.xiao.aes.util; import java.io.UnsupportedEncodingException; import java.security.SecureRan

swift3.0 如何優雅的自定義tableViewcell最簡單的自定義cell閉包事件傳遞程式碼封裝

一:最近在自學swift3.0,故而把OC中最簡單自定義cell的方法,照搬到swift試試。 下面說下設計思想。  1.設計原理,提供介面。下面貼上控制器的程式碼 func tableView(_ tableView: UITableView, cellForRow

jenkin安裝部署出現空白介面以及BindException問題解決

1.安裝配置jdk1.7以上版本 2.Jenkins安裝兩種方式: 1.官網地址:http://Jenkins-ci.org/  下載安裝包進行安裝,如果選擇此種,不用看下面安裝方式 2..去官網下載jenkins.war包。  官網映象地址:http://mirr

Android實現錄屏MediaProjection以及相關異常解決

專案需要實現一個手機的錄屏功能,於是從網上找了些相關資料和原始碼,發現跑不起來,於是開始dubug,發現坑還是很多的,這裡記錄一下實現過程和一些些遇到的異常以及一個我調整完可以跑的Demo。 首先在AndroidManifest中靜態配置許可權: <uses-permission an

hadoop tez 結合搭建以及測試異常解決

highlight from dfs 2.0 git 分享圖片 nco 發送 圖片 hadoop tez 搭建 1、下載tez,本人下載的是bin.0.92版本。 http://www.apache.org/dyn/closer.lua/tez/0.9.2/ h

Android端可用的AES加密/解密已直接封裝為檔案加密

主要功能類 AESHelper .java import android.util.Log; import java.io.File; import java.io.IOException; import java.io.RandomAccessFi

對映密碼的加密解密以及暴力破解

演算法描述:資料按照線性函式加密 y =  (a*x+b) mod m (gcd(a,m)=1) 解密 x = (y-b)*af mond m (gcd(af,m)=1, af和a互逆) 暴力破解 列舉a, b,其中a, b範圍是[1,m-1] C/C++語言程式碼 加密函式

PHP AES加密解密

<?php namespace app\models; class AES{ public $key; //建構函式,用金鑰初始化 function Prpcrypt( $k ) { $this->key = $k; } /*AES加密*/ public static function e

小程式前端js , AES加密解密java後端加密解密

最近涉及到小程式前端加密解密。網上了解了一下,程式碼要麼是js,要麼是java後端。沒有一套前後端加密解密的演算法。自己整理了一下。希望對大家有用 解密和加密的方式很多,我用到的AES 小程式前端程式碼 var fun_aes = require('../../utils/aes.js') Pag

python實現aes加密解密RSA簽名和驗籤RSA加密解密並呼叫介面

用python實現呼叫介面的示例程式碼,過程涉及到很多的加密演算法,值得分享一下。首先公鑰和私鑰如何生成,並且能相容java平臺,嘗試了很多方法。最終決定用openssl命令前提,需要安裝openssl,Crypto庫生成公鑰私鑰對過程:生成私鑰: openssl ge

Android中AES加密解密解決密文不唯一、解密不出明文問題

AES加密方式是目前來看值得選擇的加密方式,但是在Android中使用AES加密時,有些坑看似不大,卻讓很多人栽了跟頭。 Android 4.2之後SHA1PRNG強隨意種子演算法呼叫不同,需要區別呼叫,這個你造嗎。 下面貼出部分關鍵程式碼,程式碼與網路上普

Unity3D放破解反編譯DLL加密mono解密全程詳解

Unity3D加密教程     引言 :          為了防止別人通過反編譯來破解修改自己的遊戲專案。可以通過兩種比較成熟的方案來預防。一種是混淆,另一種就是加密(加殼)。由於加殼後的檔案

aes加密解密含 128、192、256位cbc、cfb、ecb、ofb、pcbc模式

AES加解密總共有以下這些 演算法/模式/填充 位元組加密後資料長度 不滿16位元組加密後長度 AES/CBC/NoPadding 16

AES前端js加密java後臺解密

一、前臺加密解密 需要引入的js:base64.js和crypto-js.js 文章的最後會貼出js原始碼。 前端方法:

Aes加密解密

tran delegate class ext str eap ase hfs tde 加密時:先對string進行utf8解析成數組-->對數組進行加密-->對加密結果用base64解析成string。 那麽揭秘時,

AES加密解密&amp;&amp;SHA1、SHA加密&amp;&amp;MD5加密

algorithm buffer password 使用 eas ray locks tex update AES加密解密 SHA1、SHA加密 MD5加密 二話不說立即附上代碼: package com.luo.util; import j