Android Data Encryption des encryption detailed _android

Source: Internet
Author: User
Tags base64 decrypt stringbuffer

Android DES encryption related implementation, a simple implementation of a moment, today to sum up:

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
  

2.) 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.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.