Androidデータ暗号化のDes暗号化の詳細
Android DES暗号化の実現について、簡単に実現しました。今日はまとめてみます。
DES暗号化の紹介:
DESは対称暗号アルゴリズムであり、対称暗号アルゴリズムとは:暗号化と暗号解読は同じ鍵を使用するアルゴリズムである。DES暗号化アルゴリズムはIBMの研究によるものであり、
その後、米国政府に正式に採用され、その後広く普及し始めましたが、近年は56ビットの鍵をDESが使っていますので、現代的な計算能力で、
24時間以内で解読できます。
DES暗号化の使い方:
1.DesUtil定数の紹介
長さは8ビットバイトより小さくてはいけません。DES固定フォーマットは128 bitts、すなわち8 bytesです。
最初の種類:
3 DSは、3つの64ビットの鍵を使ってデータを3回暗号化するDES暗号化アルゴリズムのモードである。データ暗号化規格(DES)は、米国の暗号化規格であり、対称鍵暗号法を使用している。3 DS(Triple_DES)はDESからAESに移行する暗号化アルゴリズム(1999年、NISTが3-DESを移行の暗号化基準に指定した)であり、DESのより安全な変形である。これはDESを基本モジュールとしており、グループ化方法によりパケット暗号化アルゴリズムを設計している。
DESとAESの比較:
DES暗号化を採用すると言われましたが、心の奥底では拒否されました。単に名前からAES(Advanced Ecryption Standard)の高級暗号標準を見ても、安全性はDESより高いです。実はAESの出現自体はDESに取って代わるためで、AESはDESより安全性、効率、柔軟性を持っています。だから、対称暗号はAESを優先的に採用します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
DES暗号化の紹介:
DESは対称暗号アルゴリズムであり、対称暗号アルゴリズムとは:暗号化と暗号解読は同じ鍵を使用するアルゴリズムである。DES暗号化アルゴリズムはIBMの研究によるものであり、
その後、米国政府に正式に採用され、その後広く普及し始めましたが、近年は56ビットの鍵をDESが使っていますので、現代的な計算能力で、
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
2.秘密鍵を動的に生成する長さは8ビットバイトより小さくてはいけません。DES固定フォーマットは128 bitts、すなわち8 bytesです。
/*
* , ,
*/
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を扱う2つの方法最初の種類:
//
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知識拡張:3 DS 3 DSは、3つの64ビットの鍵を使ってデータを3回暗号化するDES暗号化アルゴリズムのモードである。データ暗号化規格(DES)は、米国の暗号化規格であり、対称鍵暗号法を使用している。3 DS(Triple_DES)はDESからAESに移行する暗号化アルゴリズム(1999年、NISTが3-DESを移行の暗号化基準に指定した)であり、DESのより安全な変形である。これはDESを基本モジュールとしており、グループ化方法によりパケット暗号化アルゴリズムを設計している。
DESとAESの比較:
DES暗号化を採用すると言われましたが、心の奥底では拒否されました。単に名前からAES(Advanced Ecryption Standard)の高級暗号標準を見ても、安全性はDESより高いです。実はAESの出現自体はDESに取って代わるためで、AESはDESより安全性、効率、柔軟性を持っています。だから、対称暗号はAESを優先的に採用します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。