java实现的DES加密算法详解

  

本文实例讲述了java实现的DES加密算法。分享给大家供大家参考,具体如下:

  

  

1,要求密钥必须是8个字节,即64位长度

  

2,因为密钥是字节[8],代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用

  

3,加密,解密都需要通过字节数组作为数据和密钥进行处理

  

  

DES加密算法属于对称加密。

  

即利用指定的密钥,按照密码的长度截取数据,分成数据块,和密钥进行复杂的移位,算数运算或者数据处理等操作,形成只有特定的密码才能够解开的数据。加密与解密用的是同一个密钥

  

  

<强> 1,密码:

  

Java/Android要使用任何加密,都需要使用密码这个类

  

使用密码进行加密,解密处理,需要创建实例对象并初始化。采用工厂模式创建对象

  

密码密码=. getinstance(“算法名称“);
  cipher.init(加密/解密模式,关键秒),

  

<强> 2,关键:

  

关键类是Java加密系统所有密码的父类

  

<强> 3,SecretKeyFactory:

  

对于DES加密解密,使用SecretKeyFactory生成,生成时需指定DESKeySpec

  

  

<强> 1。获取密码对象,设置加密算法

        密码密码=. getinstance (DES);      之前      

<强> 2,准备关键对象

  

2.1 DES加密算法使用DESKeySpec类,构造方法参数需要为8个字节的密码

  

创建DESKeySpec类对象

  

参数为密钥,8个字节

        DESKeySpec keySpec=new DESKeySpec(新byte [1, 2, 3, 4, 5, 6, 7, 8));      之前      

2.2转换成键对象

        SecretKeyFactory keyFactory=SecretKeyFactory.getInstance (EDS);   SecretKey关键=keyFactory.generateSecret (keySpec);      之前      

<强> 3。设置密码模式,加密/解密,参数一:模式,参数二:主要对象,返回字节数组

  

密码。DECRYPT_MODE解密
  密码。ENCRYPT_MODE加密

        cipher.init (Cipher.ENCRYPT_MODE、关键);      之前      

<>强4。返回加密结果,参数为加密内容

        bytep [] ret=cipher.doFinal(数据);      之前      

因为对称加密加密与解密是相逆的,所以解密步骤和加密步骤一样,只是cipher.init()的模式不同,所以我们可以写一个工具类来进行DES加密算法的加密解密

  

<强> DES加密算法工具类

     /* *   * DES加密算法   * @param模式模式:加密,解密   * @param数据需要加密的内容   * @param keyData密钥8个字节数组   * @return将内容加密后的结果也是byte[]格式的   */公共静态byte [] des (int模式,byte[]的数据,byte [] keyData)   {   byte [] ret=零;//加密的内容存在并且密钥存在且长度为8个字节   如果(数据!=零   ,,data.length> 0   ,,keyData !=null   ,,keyData.length==8) {   尝试{   密码密码=. getinstance (DES);   DESKeySpec keySpec=new DESKeySpec (keyData);   SecretKeyFactory keyFactory=SecretKeyFactory.getInstance (DES);   SecretKey关键=keyFactory.generateSecret (keySpec);   密码。init(模式、关键);   ret=cipher.doFinal(数据);   }捕捉(NoSuchAlgorithmException e) {   e.printStackTrace ();   }捕捉(NoSuchPaddingException e) {   e.printStackTrace ();   }捕捉(IllegalBlockSizeException e) {   e.printStackTrace ();   }捕捉(BadPaddingException e) {   e.printStackTrace ();   }捕捉(InvalidKeySpecException e) {   e.printStackTrace ();   }捕捉(InvalidKeyException e) {   e.printStackTrace ();   }   }   返回受潮湿腐烂;   }//DES加密   公共静态byte [] desEncrypt (byte[]的数据,byte [] keyData) {   返回des(数据,Cipher.ENCRYPT_MODE keyData);   }//DES解密   公共静态byte [] desDecrypt (byte[]的数据,byte [] keyData) {   返回des(数据,Cipher.DECRYPT_MODE keyData);   }      之前      

  

SythEncryptActivity.class:

        包com.xqx.encrypsthow;   进口android.app.Activity;   进口android.os.Bundle;   进口android.util.Base64;   进口android.util.Log;   进口android.view.View;   进口android.widget.EditText;   进口android.widget.Toast;   进口utils.EncryptUtil;   进口javax.crypto。*;   进口javax.crypto.spec.DESKeySpec;   进口java.security.InvalidKeyException;   进口java.security.NoSuchAlgorithmException;   进口java.security.spec.InvalidKeySpecException;   进口java.util.Arrays;/* *   *由管理员>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android "   android:取向=按怪薄?   android: layout_width=" match_parent "   android: layout_height=癿atch_parent”比;   EditText & lt;   android: id=癅 + id/txt_content”   android: layout_width=" match_parent "   android: layout_height=" wrap_content "   android:提示="请输入内容”/比;   EditText & lt;   android: id=癅 + id/txt_password”   android: layout_width=" match_parent "   android: layout_height=" wrap_content "   android:提示=" DES密钥”   android:文本=" 12345678 "   android: inputType=" textVisiblePassword "/比;   EditText & lt;   android: id=癅 + id/txt_result”   android: layout_width=" match_parent "   android: layout_height=" wrap_content "/比;   & lt;按钮   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:文本=" DES加密”   android: onClick=" btnDESEncrypt "/比;   & lt;按钮   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:文本=" DES解密”   android: onClick=" btnDESDecrypt "/比;   & lt;/LinearLayout>      

java实现的DES加密算法详解