Preface:
A colleague consulted me about the implementation of Android DES Encryption, a simple implementation, today to sum up.
Several other encryption methods:
RSA encryption of Android data encryption
AES encryption of Android data encryption
Des encryption of Android data encryption
MD5 encryption of Android data encryption
BASE64 coding algorithm of Android data encryption
The safe hashing algorithm of SHA for android Data encryption
DES encryption Introduction:
Des is a symmetric encryption algorithm, the so-called symmetric encryption algorithm is: Encryption and decryption using the same key algorithm. Des encryption algorithms are derived from IBM's research,
It was later formally adopted by the United States Government, and began to circulate widely, but in recent years it has been used less and more, because Des uses a 56-bit key to modern computing power,
Can be cracked within 24 hours.
DES encryption Usage:
1.) Desutil Constant Class Introduction
Private final static String HEX = "0123456789ABCDEF";
Private final static String transformation = "des/cbc/pkcs5padding";//des is encrypted. CBC is working mode pkcs5padding is fill mode
private Final static String Ivparameterspec = "01020304";////initialization vector parameter, AES to 16bytes. DES is 8bytes.
Private final static string algorithm = "DES";//des is the encryption method
private static final String sha1prng = "sha1prng";////sha1pr NG strong random seed algorithm, to distinguish more than 4.2 version of the call method
1.) Dynamic generation of secret key
Length cannot be less than 8 bytes because des has a fixed format of 128bits, or 8bytes.
* * Generate random number, can be used as dynamic key encryption and decryption key must be consistent, otherwise it will not be
decrypted
/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;
}
Binary turn character 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.) Two ways of handling key keys
First type:
Processing of keys
private static key Getrawkey (String key) throws Exception {
Keygenerator KGen = Keygenerator.getinstan CE (algorithm);
For Android
securerandom sr = null;
In more than 4.2 versions, the SecureRandom acquisition has changed
if (Android.os.Build.VERSION.SDK_INT >=) {
sr = Securerandom.getinstance (sha1prng, "Crypto");
} else {
sr = securerandom.getinstance (SHA1PRNG);
}
For Java
//SecureRandom = Securerandom.getinstance (sha1prng);
Sr.setseed (Key.getbytes ());
Kgen.init (, SR); Des fixed format is 64bits, that is, 8bytes.
Secretkey skey = Kgen.generatekey ();
Byte[] raw = skey.getencoded ();
return new Secretkeyspec (raw, algorithm);
The second type:
Processing of keys
private static key Getrawkey (String key) throws Exception {
Deskeyspec dks = new Deskeyspec (key.getbyte s ());
Secretkeyfactory keyfactory = secretkeyfactory.getinstance (algorithm);
Return Keyfactory.generatesecret (DKS);
}
4.) Encryption Implementation
/**
* des algorithm, encryption
*
@param data to be encrypted string
* @param key encryption private key, length can not be less than 8 bits
* @return encrypted byte array, generally combined with BASE64 encoding
*/Public
static string encode (string key, String data) {return
encode (key, data.getbytes ());
}
/**
* des algorithm, encryption
*
@param data to be encrypted string
* @param key encryption private key, length can not be less than 8 bits
* @return encrypted byte array, General associative BASE64 encoding using
/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.) Decryption Implementation
/**
* Gets the encoded value
* *
@param key
* @param data
* @return/Public
static string decode (string Key, String data) {return
decode (key, Base64.decode (data, Base64.default));
}
/**
* des algorithm, decryption
*
@param data to decrypt the string
* @param key to decrypt the private key, length can not be less than 8 bits
* @return decrypted byte array
*/< C17/>public static string decode (string key, byte[] Data {
try {
Cipher Cipher = cipher.getinstance (Transforma tion);
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 knowledge Extension: 3DES
3DES is a pattern of DES encryption algorithms that uses 3 64-bit keys to encrypt data three times. Data Encryption Standard (DES) is a long-standing encryption standard in the United States, which uses symmetric key cryptography. 3DES (i.e. Triple DES) is the DES encryption algorithm for the transition to AES (in 1999, NIST designated 3-des as the Transitional Encryption Standard), a more secure variant of DES. It takes des as the basic module, and designs the packet encryption algorithm by the combination grouping method.
Des compared with AES:
Was asked to use DES Encryption in the depths of my heart I was refused. Only from the name of the AES (Advanced encryption Standard) Advanced encryption standards, security is higher than DES, in fact, the appearance of AES itself is to replace DES, AES has better security, efficiency, flexibility than DES, So symmetric encryption is preferred by AES.
The above is the entire content of this article, I hope to help you learn, but also hope that we support the cloud habitat community.