Android端可用的AES加密/解密,已直接封裝為檔案加密
主要功能類 AESHelper .java
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESHelper {
private static final String TAG = AESHelper.class.getSimpleName();
public boolean AESCipher(int cipherMode, String sourceFilePath,
String targetFilePath, String seed) {
boolean result = false;
FileChannel sourceFC = null;
FileChannel targetFC = null;
try {
if (cipherMode != Cipher.ENCRYPT_MODE
&& cipherMode != Cipher.DECRYPT_MODE) {
return false;
}
Cipher mCipher = Cipher.getInstance("AES/CFB/NoPadding");
byte[] rawkey = getRawKey(seed.getBytes("UTF-8"));
File sourceFile = new File(sourceFilePath);
File targetFile = new File(targetFilePath);
sourceFC = new RandomAccessFile(sourceFile, "r").getChannel();
targetFC = new RandomAccessFile(targetFile, "rw").getChannel();
SecretKeySpec secretKey = new SecretKeySpec(rawkey, "AES");
mCipher.init(cipherMode, secretKey, new IvParameterSpec(
new byte[mCipher.getBlockSize()]));
ByteBuffer byteData = ByteBuffer.allocate(1024);
while (sourceFC.read(byteData) != -1) {
// 通過通道讀寫交叉進行。
// 將緩衝區準備為資料傳出狀態
byteData.flip();
byte[] byteList = new byte[byteData.remaining()];
byteData.get(byteList, 0, byteList.length);
//此處,若不使用陣列加密解密會失敗,因為當byteData達不到1024個時,加密方式不同對空白位元組的處理也不相同,從而導致成功與失敗。
byte[] bytes = mCipher.doFinal(byteList);
targetFC.write(ByteBuffer.wrap(bytes));
byteData.clear();
}
result = true;
} catch (IOException | NoSuchAlgorithmException | InvalidKeyException
| InvalidAlgorithmParameterException
| IllegalBlockSizeException | BadPaddingException
| NoSuchPaddingException | NoSuchProviderException e) {
Log.d(TAG, e.getMessage());
} finally {
try {
if (sourceFC != null) {
sourceFC.close();
}
if (targetFC != null) {
targetFC.close();
}
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
return result;
}
/**
* 使用一個安全的隨機數來產生一個密匙,密匙加密使用的
*
* @param seed 金鑰種子(位元組)
* @return 得到的安全金鑰
* @throws NoSuchAlgorithmException
*/
private byte[] getRawKey(byte[] seed) throws NoSuchAlgorithmException, NoSuchProviderException {
// 獲得一個隨機數,傳入的引數為預設方式。
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
//網上部落格新增"Crypto" 後方能使用
// 設定一個種子,一般是使用者設定的密碼
sr.setSeed(seed);
// 獲得一個key生成器(AES加密模式)
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
// 設定密匙長度128位
keyGen.init(128, sr);
// 獲得密匙
SecretKey key = keyGen.generateKey();
// 返回密匙的byte陣列供加解密使用
return key.getEncoded();
}
}
為避免執行緒阻塞,在介面裡的子執行緒中呼叫以下方法
AESHelper mAESHelper = new AESHelper();
//自定義金鑰,字母和數字混合
String mSeed = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//Cipher.ENCRYPT_MODE表示加密模式,Cipher.DECRYPT_MODE表示解密模式
String result = mAESHelper.AESCipher(Cipher.ENCRYPT_MODE, SourceFilePath,
NewFilePath + NewFileName, mSeed) ? "加密已完成" : "加密失敗!";
已經完成,親測可用,無法使用的童鞋請留下評論
相關推薦
Android端可用的AES加密/解密,已直接封裝為檔案加密
主要功能類 AESHelper .java import android.util.Log; import java.io.File; import java.io.IOException; import java.io.RandomAccessFi
小程式,前端,js , AES加密解密,java後端加密,解密
最近涉及到小程式前端加密解密。網上了解了一下,程式碼要麼是js,要麼是java後端。沒有一套前後端加密解密的演算法。自己整理了一下。希望對大家有用 解密和加密的方式很多,我用到的AES 小程式前端程式碼 var fun_aes = require('../../utils/aes.js') Pag
Node.js 基於 ursa 模組的 RSA 加密解密(已與IOS,Android實現加密通訊)
前幾天除錯一個RSA加密,遇到一些問題,在網上找了好久好久,與Node.js相關的資源少得非常可憐,最後還是靠自己一步一步解決了,今天把程式碼和一些心得拿出來分享一下: cnode連結地址:https://cnodejs.org/topic/54d2de4cf
python實現aes加密解密,RSA簽名和驗籤,RSA加密解密,並呼叫介面
用python實現呼叫介面的示例程式碼,過程涉及到很多的加密演算法,值得分享一下。首先公鑰和私鑰如何生成,並且能相容java平臺,嘗試了很多方法。最終決定用openssl命令前提,需要安裝openssl,Crypto庫生成公鑰私鑰對過程:生成私鑰: openssl ge
aes加密解密,含 128、192、256位,cbc、cfb、ecb、ofb、pcbc模式
AES加解密總共有以下這些 演算法/模式/填充 位元組加密後資料長度 不滿16位元組加密後長度 AES/CBC/NoPadding 16
用CryptoJS 實現js端3des加密和解密,用openssl_encrypt實現php的3des加密解密,相容java和C#和c++等
因為要開發社交平臺,涉及到聊天內容,這些敏感內容想用3des加密傳輸,百度了好多資料,測試了好多次,終於實現了功能,可以直接使用,這裡寫下來,希望幫助到其他朋友。 聽說微信小程式需要資料加密,相信這個能幫到大家。 這裡說一下,iv向量一般是8位
python進行des加密解密,而且可以與JAVA進行互相加密解密
odi times pla dea details names ideal cati encrypt import binasciifrom pyDes import des, CBC, PAD_PKCS5import uuidimport time# pip instal
AES加解密,相容win和linux平臺
AES加密 此文采用對稱加密演算法-AES,所謂對稱是說傳送方和接收方的金鑰是一樣的。 據說實現該演算法的時候,設定金鑰長度大於128會出現錯誤:Illegal key size or default parameters,這是因為美國的出口限制,Sun通過許可權檔案(local_polic
Python下RSA加密/解密, 簽名/
import rsa # 生成金鑰 (pubkey, privkey) = rsa.newkeys(1024) # 儲存金鑰 with open('public.pem','w+') as f: f.write(pubkey.save_pkcs1().de
微信小程式3des加密解密,這個需要看我上一遍文章微信小程式不支援window物件跟navigator物件... 本加密是存在問題的,加密java有時候不能解開
var base64ende = require('../utils/Base64.js'); /** * @description 3DES加密解密 */ function des(key, message, encrypt, mode, iv, padding
前後端實現AES加解密(一):java後端實現
首先需要匯入一個第三方jsr包,commons-codec.jar 下面是一個寫好的工具類,呼叫該類的方法,實現使用指定金鑰對明文進行加解密: package util; import java.io.UnsupportedEncodingExceptio
Android獲取可用記憶體(系統,sd卡,u盤)
/** *通過反射獲取不同儲存卡的路徑,主要是用來獲取外掛sd卡路徑,內建sd卡路徑可通過Environment類的方法獲得 */ public static boolean hasEnoughStor
PDF的加密解密,解密後隨便怎麼玩
摘要: 首先,我們要清楚PDF的加密型別和方式:PDF的密碼常規分為兩類:user password 和 owner password, user password(使用者密碼):我們要開啟/檢視/獲取任何該PDF的資訊所需要的密碼,也就是任何
jsp開發中中文傳值加密解密,解決亂碼問題
一: 頁面使用js加密: user = window.encodeURI(user); user = window.encodeURI(user);
RSA加密解密,String轉PublicKey、PrivateKey;附Base64.JAR
網路請求的資料需要加密,伺服器給的他們那一套在Android一直報錯,自己寫了一個;package com.cc.common.util; import javax.crypto.Cipher; import java.security.*; import java.se
資料庫加密解密,SQLServerException:將截斷字串或二進位制資料的解決方法:
在做冬奧組委專案中,甲方要求加密資料庫明文資訊,在執行中因為資料中有異常資訊,如大字型資料,造成上面的問題 主要原因就是你增加的資料欄位長度超過資料庫中欄位所定義長度,去檢視一下自己資料庫中的欄位的長度,一般是誤寫出來的,檢視一下自己資料庫中需要自己設定欄位型別
一個最簡單的加密解密演算法 人人能懂 異或加密
#include <iostream>// KEY 非常重要,不能對公眾洩露KEY值// 傳送端和接收端提前祕密約定好KEY值#define KEY 1313113 // 萬歲萬歲萬萬歲using namespace std;// 加密演算法可以公開int encr
關於android R.layout 中找不到已存在的佈局檔案問題的解決
今天下午遇到一個很蛋疼的問題,打R.layout.,居然不會提示已經寫好的佈局檔案,自己把xml檔名打下去後,居然提示錯誤. 開始以為是R檔案中沒有自動生成關於佈局檔案對應的整型,看了R檔案,其實是有生成的,找了很久都不知道什麼原因. 後來發現原來是在複製的時候把andro
android編譯surface c++程式時,報錯缺少.o檔案
最近在研究Android的surface系統,寫了個小demo,編譯的時候,一直報錯,說是缺少.o檔案,但是看程式碼一直沒問題,後來發現原來是在window下編寫的,然後在linux編譯的時候,字尾多了^M,所以導致編譯不過。 其實提示類似的錯誤,肯定是程式碼那塊地方出現了
android基於開源網絡框架asychhttpclient,二次封裝為通用網絡請求組件
定義 pen ntc ucc 編寫 stat ner href face 網絡請求是全部App都不可缺少的功能,假設每次開發都重寫一次網絡請求或者將曾經的代碼拷貝到新的App中,不是非常合理,出於此目的,我希望將整個網絡請求框架獨立出來,與業務邏輯分隔開,這