本文实例讲述了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加密算法详解