Android資料加密之Des加密
前言:
端午節前有個同事諮詢我有關Android DES加密的相關實現,簡單的實現了一下,今天來總結一下。
其他幾種加密方式:
DES加密介紹:
DES是一種對稱加密演算法,所謂對稱加密演算法即:加密和解密使用相同金鑰的演算法。DES加密演算法出自IBM的研究,
後來被美國政府正式採用,之後開始廣泛流傳,但是近些年使用越來越少,因為DES使用56位金鑰,以現代計算能力,
24小時內即可被破解。
DES加密使用方式:
1.)DesUtil常量類介紹
private final static String HEX = "0123456789ABCDEF";private final static String TRANSFORMATION = "DES/CBC/PKCS5Padding";//DES是加密方式 CBC是工作模式 PKCS5Padding是填充模式 private final static String IVPARAMETERSPEC = "01020304";////初始化向量引數,AES 為16bytes. DES 為8bytes. private final static String ALGORITHM = "DES";//DES是加密方式 private static final String SHA1PRNG = "SHA1PRNG";////SHA1PRNG 強隨機種子演算法, 要區別4.2以上版本的呼叫方法
1.)動態生成祕鑰
長度不能夠小於8位位元組 因為DES固定格式為128bits,即8bytes。
/* * 生成隨機數,可以當做動態的金鑰 加密和解密的金鑰必須一致,不然將不能解密 */ public static String generateKey() { try { SecureRandom localSecureRandom = SecureRandom.getInstance(SHA1PRNG); byte[] bytes_key = new byte[20]; localSecureRandom.nextBytes(bytes_key); String str_key = toHex(bytes_key); return str_key; } catch (Exception e) { e.printStackTrace(); } return null; } //二進位制轉字元 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)); }
3.)處理祕鑰Key的兩種方式
第一種:
// 對金鑰進行處理 private static Key getRawKey(String key) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM); //for android SecureRandom sr = null; // 在4.2以上版本中,SecureRandom獲取方式發生了改變 if (android.os.Build.VERSION.SDK_INT >= 17) { sr = SecureRandom.getInstance(SHA1PRNG, "Crypto"); } else { sr = SecureRandom.getInstance(SHA1PRNG); } // for Java // secureRandom = SecureRandom.getInstance(SHA1PRNG); sr.setSeed(key.getBytes()); kgen.init(64, sr); //DES固定格式為64bits,即8bytes。 SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); return new SecretKeySpec(raw, ALGORITHM); }
第二種:
// 對金鑰進行處理 private static Key getRawKey(String key) throws Exception { DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); return keyFactory.generateSecret(dks); }
4.)加密實現
/** * DES演算法,加密 * * @param data 待加密字串 * @param key 加密私鑰,長度不能夠小於8位 * @return 加密後的位元組陣列,一般結合Base64編碼使用 */ public static String encode(String key, String data) { return encode(key, data.getBytes()); } /** * DES演算法,加密 * * @param data 待加密字串 * @param key 加密私鑰,長度不能夠小於8位 * @return 加密後的位元組陣列,一般結合Base64編碼使用 */ public static String encode(String key, byte[] data) { try { Cipher cipher = Cipher.getInstance(TRANSFORMATION); IvParameterSpec iv = new IvParameterSpec(IVPARAMETERSPEC.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, getRawKey(key), iv); byte[] bytes = cipher.doFinal(data); return Base64.encodeToString(bytes, Base64.DEFAULT); } catch (Exception e) { return null; } }
5.)解密實現
/** * 獲取編碼後的值 * * @param key * @param data * @return */ public static String decode(String key, String data) { return decode(key, Base64.decode(data, Base64.DEFAULT)); } /** * DES演算法,解密 * * @param data 待解密字串 * @param key 解密私鑰,長度不能夠小於8位 * @return 解密後的位元組陣列 */ public static String decode(String key, byte[] data) { try { Cipher cipher = Cipher.getInstance(TRANSFORMATION); IvParameterSpec iv = new IvParameterSpec(IVPARAMETERSPEC.getBytes()); cipher.init(Cipher.DECRYPT_MODE, getRawKey(key), iv); byte[] original = cipher.doFinal(data); String originalString = new String(original); return originalString; } catch (Exception e) { return null; } }
DES知識擴充套件:3DES
3DES是DES加密演算法的一種模式,它使用3條64位的金鑰對資料進行三次加密。資料加密標準(DES)是美國的一種由來已久的加密標準,它使用對稱金鑰加密法。3DES(即Triple DES)是DES向AES過渡的加密演算法(1999年,NIST將3-DES指定為過渡的加密標準),是DES的一個更安全的變形。它以DES為基本模組,通過組合分組方法設計出分組加密演算法。
DES與AES比較:
當時被問起採用DES加密內心深處我是拒絕的。單純從名字上看AES(Advanced Encryption Standard)高階加密標準,安全性要高於DES,其實AES的出現本身就是為了取代DES的,AES具有比DES更好的安全性、效率、靈活性,所以對稱加密優先採用AES。
相關推薦
Android資料加密之Des加密
前言: 端午節前有個同事諮詢我有關Android DES加密的相關實現,簡單的實現了一下,今天來總結一下。 其他幾種加密方式: DES加密介紹: DES是一種對稱加密演算法,所謂對稱加密演算法即:加密和解密使用相同金鑰的演算法。DES加密演算法出自IBM的研究,後來被
Android資料加密之Aes加密
前言: 專案中除了登陸,支付等介面採用rsa非對稱加密,之外的採用aes對稱加密,今天我們來認識一下aes加密。 其他幾種加密方式: 什麼是aes加密? 高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijn
Android資料加密之Rsa加密
前言: 最近無意中和同事交流資料安全傳輸的問題,想起自己曾經使用過的Rsa非對稱加密演算法,閒下來總結一下。 其他幾種加密方式: 什麼是Rsa加密? RSA演算法是最流行的公鑰密碼演算法,使用長度可以變化的金鑰。RSA是第一個既能用於資料加密也能用於數字簽名的演算法。RSA演算
Android資料加密之MD5加密
前言: 專案中無論是密碼的儲存或者說判斷檔案是否是同一檔案,都會用到MD5演算法,今天來總結一下MD5加密演算法。 什麼是MD5加密? MD5英文全稱“Message-Digest Algorithm 5”,翻譯過來是“訊息摘要演算法5”,由MD2、MD3、MD4演變過來的,是一種
Android資料儲存之Sqlite採用SQLCipher資料庫加密實戰
前言: 最近研究了Android Sqlite資料庫(文章地址:http://www.cnblogs.com/whoislcj/p/5506294.html)以及ContentProvider程式間資料共享(http://www.cnblogs.com/whoislcj/p/5507928.html),
jdbc 加密之 DES 演算法
1.沒有加密前,我們的 jdbc.propertites 檔案的資訊上這樣的: #沒有加密的 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/o2o?useUnicode=true
iOS、後臺、Android 三個一致的加密工具 ---------DES加密
首先是JAVA端的加密工具類,它同樣適用於Android端,無需任何修改,即可保證Java與Android端的加解密一致,並且中文不會亂碼。我經過和IOS共同測試,是沒有問題的 iOS端 程式碼 iOS端的加密工具
程式設計師之網路安全系列(三):資料加密之對稱加密演算法
系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 上一節,我們使用了Ha
iOS常用加密之RSA加密解密
pen style 工作 eight else mark 分段 load port 前言: iOS常用的加密有很多種,前兩天在工作中遇到了RSA加密,現在把代嗎分享出來。 RSA基本原理 RSA使用"秘匙對"對數據進行加密解密.在加密解密數據前,需要先生成公鑰(publi
Android 資料儲存之 SQLite資料庫儲存
轉載自:https://www.cnblogs.com/woider/p/5136734.html ----------------------------------------SQLite資料庫---------------------------------------------- SQLite是一
Android資料儲存之SQLite簡單用法
實現效果圖如下: activity_main.xml佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/a
Android 資料儲存之File
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { sup
加密演算法------DES加密演算法詳解
一、加密演算法的分類1.對稱加解密演算法a.通訊雙方同時掌握一個金鑰,加密解密都是由一個金鑰完成的(即加密金鑰等於解密金鑰,加解密金鑰可以相互推倒出來)。b.雙方通訊前共同擬定一個金鑰,不對第三方公開。c.不具有個體原子性,一個金鑰被共享,洩漏機率增大2.公私鑰加解密演算法a
Android資料儲存之File
檔案儲存分為兩種: (1)內部儲存: 存放路徑為/data/data/package_name/files/ (2)外部儲存: SD卡 (3)擴充對資源xml檔案的操作 一、內部儲存 1.兩個函式openFileOutput 寫入 許可權:MODE_PRIVATE,
Java 加密之Desede加密(不用Base64)
專案中用到了DES加密,經過一番搜尋網上找到不少程式碼,但都用到了Base64編碼,可是這個東西是sun自用的包,不推薦使用的,心理彆扭就自己找到了不用它的方法。程式碼如下: import java.io.UnsupportedEncodingException; impo
Android資料儲存之SharedPreferences詳細總結
Android中常見的幾種儲存方式: SharedPreferences SQLite資料庫儲存 檔案儲存 網路儲存 其中也許最常用的就是SharedPreferences儲存和檔案儲存了,今天總結一下SharedPreferences。帶著問題學習Sh
對稱加密之AES加密
加密和解密過程中,我們一般使用byte,因為這樣不容易產生亂碼,如果直接是String型別,被加密解密後的String,對中文來說,前後的Unicode是否一致,就很難保證了。 之前說了使用異或運算子加密。在Java中,有API提供,讓我們實現AES對稱加密。
oracle MD5加密,DES加密,DES解密
MD5 加密 CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGIN retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_
Android資料安全之URLEncoder編碼
URLEncoder編碼 客戶端在進行網頁請求的時候,網址中可能會包含非ASCII碼形式的內容,比如中文、?、&等特殊字元。而直接把這些字元放到網址中請求是不允許的,容易和get請求的轉義符衝突,也容易出現丟失或亂碼的現象,所以需要用URLEnc
Android資料儲存之SharedPreferences及如何安全儲存
前言: 最近一直在學習Android的資料儲存,當學習到SharedPreferences的時候讓我回想起了ios的NSUserDefaults,其實這兩個真是異曲同工的,實現方式都是通過xml儲存的,在ios裡叫plist檔案,裡面都是xml。 什麼是SharedPreferences儲存?