『壹』 求安卓加密,安卓應用加密方式
android是用java語言開發的,java語言,JDK給我們提供了非常多的加密演算法
如基本的單向加密演算法:
BASE64 嚴格地說,屬於編碼格式,而非加密演算法
MD5(Message Digest algorithm 5,信息摘要演算法)
SHA(Secure Hash Algorithm,安全散列演算法)
HMAC(Hash Message Authentication Code,散列消息鑒別碼)
復雜的對稱加密(DES、PBE)、非對稱加密演算法:
DES(Data Encryption Standard,數據加密演算法)
PBE(Password-based encryption,基於密碼驗證)
RSA(演算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)DH(Diffie-Hellman演算法,密鑰一致協議)
DSA(Digital Signature Algorithm,數字簽名)
ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)
以下就是講解BASE64、MD5、SHA、HMAC幾種方法
MD5、SHA、HMAC這三種加密演算法,可謂是非可逆加密,就是不可解密的加密方法。我們通常只把他們作為加密的基礎。單純的以上三種的加密並不可靠。
一. BASE64
按 照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登錄操作的用戶名、密碼欄位通過BASE64加密的。
二. MD5
MD5 -- message-digest algorithm 5 (信息-摘要演算法)縮寫,廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5後都能生成唯一的MD5值。好比現在的ISO校驗,都 是MD5校驗。怎麼用?當然是把ISO經過MD5後產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗證文 件是否一致的。
三. SHA
SHA(Secure Hash Algorithm,安全散列演算法),數字簽名等密碼學應用中重要的工具,被廣泛地應用於電子商務等信息安全領域。雖然,SHA與MD5通過碰撞法都被破解了, 但是SHA仍然是公認的安全加密演算法,較之MD5更為安全。
四. HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個 標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。
『貳』 Android APP加密方法都有哪些
1 偽加密是Android4.2.x系統發布前的Android加密方式之一,通過java代碼對APK(壓縮文件)進行偽加密,其修改原理是修改連續4位位元組標記為」P K 01 02」的後第5位位元組,奇數表示不加密偶數表示加密。
2 混淆保護
把原來有具體含義的類名,變數名,方法名,修改成讓人看不懂的名字,例如方法名getUserName編程了方法名。
混淆保護只是增加了代碼閱讀難度,對於破解基本上是沒有實質性作用的
運行時驗證,主要是指在代碼啟動的時候本地獲取簽名信息然後對簽名信息進行檢驗來判斷自己的應用是否是正版,如果簽名信息不是正版則提示盜版或者直接崩潰。當然你可以把必要的數據放在伺服器端。Android APP加密方法都有哪些?破解:找到smali文件中,判斷是否相等的部分。改為常量true,即失效。
總之,反編譯一些apk之後,只要是java代碼寫的總會有smil文件。對於smil文件,如果耐心讀的話,還是可以查看到一些關鍵代碼的。
相較於應用來說,游戲apk因為採用cocos2d-x或者 unity3D,採用的是c++和c# 編寫的跨平台程序,在apk採用JNI的方式。所以沒有smali,可以防止靜態被破解apk包。
當然游戲包apk在運行的時候,會把.*so載入到內存中。動態也是可以在內存中抓取相應的數據。只不過NDK相對於smali破解來說,根部不是一個層級的關系。
3 使用第三方Android加密平台
『叄』 Android 的幾種加密方式
Android 中的最常用得到有三種加密方式:MD5,AES,RSA.
1.MD5
MD5本質是一種散列函數,用以提供消息的完整性保護。
特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;
2.容易計算:從原數據計算出MD5值很容易;
3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別
4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;
2.RSA加密
RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。
RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。
3.AES加密
AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。
『肆』 Android項目里如何混淆自己打的jar包或者防止被反編譯
Android之防止反編譯技巧:
1. 判斷程序是否運行在模擬器上
boolean isRunningInEmualtor() {
boolean qemuKernel = false;
Process process = null;
DataOutputStream os = null;
try{
process = Runtime.getRuntime().exec("getprop ro.kernel.qemu");
os = new DataOutputStream(process.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
os.writeBytes("exit\n");
os.flush();
process.waitFor();
// getprop ro.kernel.qemu == 1 在模擬器
// getprop ro.proct.model == "sdk" 在模擬器
// getprop ro.build.tags == "test-keys" 在模擬器
qemuKernel = (Integer.valueOf(in.readLine()) == 1);
Log.d("com.droider.checkqemu", "檢測到模擬器:" + qemuKernel);
} catch (Exception e){
qemuKernel = false;
Log.d("com.droider.checkqemu", "run failed" + e.getMessage());
} finally {
try{
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
Log.d("com.droider.checkqemu", "run finally");
}
return qemuKernel;
}
2. 檢測keystore簽名,再與之前得做比較
public int getSignature(String packageName) {
PackageManager pm = this.getPackageManager();
PackageInfo pi = null;
int sig = 0;
try {
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
Signature[] s = pi.signatures;
sig = s[0].hashCode();
} catch (Exception e1) {
sig = 0;
e1.printStackTrace();
}
return sig;
}
3. 檢測包名,版本名和版本號,然後做判斷:
private String getAppInfo() {
try {
String pkName = this.getPackageName();
String versionName = this.getPackageManager().getPackageInfo(
pkName, 0).versionName;
int versionCode = this.getPackageManager()
.getPackageInfo(pkName, 0).versionCode;
return pkName + " " + versionName + " " + versionCode;
} catch (Exception e) {
}
return null;
}
4. 把jpg圖片寫成是png格式得圖片 但是最新版本的apktool已經修復了
5. 花指令,影響jd-gui 但是最新版本的jd-gui已經修復
private static final char[] wJ = "0123456789abcdef".toCharArray();
public static String imsi = "204046330839890";
public static String p = "0";
public static String keyword = "電話";
public static String tranlateKeyword = "%E7%94%B5%E8%AF%9D";
在每個類裡面加入 如上欄位。。。。
https://***/ 一個第三方得」愛加密「網站 1.需要使用官方的打包key工具打包後上傳到"愛加密"網站進行處理,然後到網站上面下載,下載後還要用"愛加密"的打包工具再次進行打包即可。
『伍』 android studio aar能加密嗎
在eclipse中一個依賴庫就叫一個library 使用android提供的v7包在Android studio中依賴庫已經叫Mole了,其實就是一個library由於android studio中是用grable來構建項目的,所以目錄結構和叫法也不一樣
『陸』 請問下如何把 jar 文件加密
可以使用Virbox Protector Standalone 加殼工具對java的jar、war包及class文件進行保護。可防止代碼反編譯,更安全,更方便
產品簡介
Virbox Protector Standalone提供了強大的代碼虛擬化、高級混淆與智能壓縮技術,保護您的程序免受逆向工程和非法修改。
Virbox Protector Standalone 將被保護的程序代碼轉換為虛擬機代碼,程序運行時,虛擬機將模擬程序執行,進入和離開虛擬機都有高級代碼混淆。虛擬機配合代碼混淆可以達到很好的保護效果,尤其是開發者的私有邏輯。高級混淆利用花指令和代碼非等價變形等技術,將程序的代碼,轉換成一種功能上等價,但是難於閱讀和理解的代碼,可充分干擾靜態分析。應用程序的解壓縮含有動態密碼,讓一切自動脫殼工具失效,有效的阻止.Net、PE 程序的直接反編譯。
特點
多種加密策略:代碼虛擬化、高級混淆、智能壓縮
性能分析:智能分析引擎,一鍵分析各個函數模塊調用的次數
支持多種開發語言:多種開發語言加殼支持
源碼級保護:保護到匯編級別,c#保護IL級別
免費更新:免費版本升級
『柒』 android,java 通用的加密解密方式有幾種
移動端越來越火了,我們在開發過程中,總會碰到要和移動端打交道的場景,比如.NET和android或者iOS的打交道。為了讓數據交互更安全,我們需要對數據進行加密傳輸。今天研究了一下,把幾種語言的加密都實踐了一遍,實現了.NET,java(android),iOS都同一套的加密演算法,下面就分享給大家。
AES加密有多種演算法模式,下面提供兩套模式的可用源碼。
加密方式:
先將文本AES加密
返回Base64轉碼
解密方式:
將數據進行Base64解碼
進行AES解密
一、CBC(Cipher Block Chaining,加密塊鏈)模式
是一種循環模式,前一個分組的密文和當前分組的明文異或操作後再加密,這樣做的目的是增強破解難度.
密鑰
密鑰偏移量
java/adroid加密AESOperator類:
package com.bci.wx.base.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* AES 是一種可逆加密演算法,對用戶的敏感信息加密處理 對原始數據進行AES加密後,在進行Base64編碼轉化;
*/
public class AESOperator {
/*
* 加密用的Key 可以用26個字母和數字組成 此處使用AES-128-CBC加密模式,key需要為16位。
*/
private String sKey = "smkldospdosldaaa";//key,可自行修改
private String ivParameter = "0392039203920300";//偏移量,可自行修改
private static AESOperator instance = null;
private AESOperator() {
}
public static AESOperator getInstance() {
if (instance == null)
instance = new AESOperator();
return instance;
}
public static String Encrypt(String encData ,String secretKey,String vector) throws Exception {
if(secretKey == null) {
return null;
}
if(secretKey.length() != 16) {
return null;
}
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = secretKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}
// 加密
public String encrypt(String sSrc) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}
// 解密
public String decrypt(String sSrc) throws Exception {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public String decrypt(String sSrc,String key,String ivs) throws Exception {
try {
byte[] raw = key.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivs.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public static String encodeBytes(byte[] bytes) {
StringBuffer strBuf = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));
strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
}
return strBuf.toString();
}
『捌』 如何把 jar 文件加密
1,打開一個要加密的文本文檔。
2,確保一下裡面的內容都保存好了後,關閉退出。
3,返回存基胡放這個文本文檔的地鉛鋒鄭方,然後選中它,右鍵一下,在彈出來的列表中我們選擇「重命名」選項。
4,接著就可以對這個jar檔轉換一下格式,比如可以把它轉換成表格或者word文檔,即把後綴改成「.doc」等格式,然後轉換成文槐頌檔後,這時就知道文檔裡面是加密功能的。
『玖』 安卓手機文件如何加密
利用自帶的文件管理更改圖片、視頻、聲音文件的後綴名,然後更改後的文件就不會在多媒體里出現,如需要查看時,將後綴名改回即可。下面是我收集整理的安卓手機文件如何加密,歡迎閱讀。
第一種方法:用手機鎖加密。
得用手機鎖將打開該文件的程序鎖定,沒有密碼就打不開這程序,從而達到文件加密的目的。
第二種方法:用移位的方式加密。
就是把想要隱藏的文件夾放如隱藏文件夾如System裡面,這樣你的文件就不會顯示出來了。這個方法隱藏文件很好用,但要想把這個隱藏文件給找出來,就很煩了,當然有電腦那就另當別論了。
第三種方法:更改後綴名加密。
利用自帶的文件管理更改圖片、視頻、聲音文件的後綴名,然後更改後的文件就不會在多媒體里出現,如需要查看時,將後綴名改回即可。
第四種方法:用文件鎖Best_Crypto加密。
該軟體可以對手機C/D/E各個文件夾內的文件夾加密,可以對jpg,gif,sis,3gp,mp4等文件加密,是出的比較早的S60第三版的加密軟體,其加密的方法是復制原文件後進行加密。
第五種方法:用文件動力、Y-管理器或Q-管理器加密。
將文件夾的`屬性更改為隱藏,然後將需要加密的文件移動到該文件夾即可。但在實踐過程中發現,在多媒體里查看過的文件,即使該文件移動到隱藏文件夾後依然可以在多媒體里查看到,解決的方法為:將文件移動到隱藏文件夾後,更改該文件夾的名字。
第六種方法:用電話精靈加密。
電話精靈的加密功能極其強大,可以對簡訊、通話記錄和文件加密,在此本人只講講文件加密的方法:進入電話精靈--文件管理器--輸入密碼(如未改密碼,則為默認的123)--找到需要加密的文件--選項--加密(多個文件加密,則先進行標記,然後加密)。電話精靈只能加密文件,不能加密文件夾,加密後的文件,用Y-管理器或Q-管理器可以查看到,但不能打開,解密時只需進入電話精靈的文件管理,點選項後選解密即可。
『拾』 android把加密演算法放在so裡面 怎麼辦
1.比如我現在在用net.sqlcipher.database 這個加密庫(網上能搜得到的,用於資料庫加密)。 那麼我現在就在項目用載入這個jar包(在你的項目單擊右鍵-》屬性-》Java Build Path-》Libraries-》Add Jars,選擇提供給你的jar包,我這里是 sqlcipher.jar,然後在Order and Export勾選你剛剛載入的 jar包。)
2.打開你的workspace目錄,在你的項目目錄下創建一個文件夾libs(如果文件夾不存在的話),然後將提供給你的so庫放入該目錄,基本架構就算是搭建好了。
3.進行開發,這里你需要問一下提供給你jar包的廠家,基本的用法,否則的話是無法進行開發的,因為你都不知道怎麼去用。 sqlcipher的基本用法是:
SQLiteDatabase.loadLibs(this); //載入 so庫文件,你的廠家的方法應該也是類似。
File databaseFile = getDatabasePath(SQLite_toll.DATABASE_NAME);
databaseFile.mkdirs();
databaseFile.delete();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, helper_SharedPreferences.get_str_sp("database_cipher",this), null);
SQLite_toll initToll = new SQLite_toll(this, avaSys);
initToll.onCreate(database);
database.close();
//因為我sqlcipher是用於資料庫加密的,所以你所看到的都是資料庫的一些方法,你廠家提供給你的jar包的用法,你是要去問他們的,或者他們的是否有開源代碼,又或者是網上也有很多人使用,那麼能搜到相關資料。
根據你補充的提問,那麼就是System.loadLibrary(this); ,就可以調用了