DES加密算法

匿名 (未验证) 提交于 2019-12-03 00:42:01

1、加密

1)页面引入JS
<script type="text/javascript" src="<%=path%>/js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="./aes/tripledes.js"></script>
<script type="text/javascript" src="./aes/mode-ecb.js"></script>

2)DES加密方法

function encryptByDES(message, key) { var keyHex = CryptoJS.enc.Utf8.parse(key); var encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); }

3)账号密码加密

var username= onm.val(); username= encryptByDES(username, "kEHrDooxWHCWtfeSxvDvgqZq"); var password= ops.val(); password= encryptByDES(password, "kEHrDooxWHCWtfeSxvDvgqZq"); $.post(contextPath + "/Login/login.do", { "username" : username, "password" : password }, function(result) { //debugger; if (result == null) { setErrMsg("登陆失败!"); unlockBtnLogin(); ......

2、解密
String username = request.getParameter("username");
//des解密后账号
String desUserName=DESUtil.decryption(username, "kEHrDooxWHCWtfeSxvDvgqZq");
String password = request.getParameter("password");
//des解密后密码
String desPassword=DESUtil.decryption(password, "kEHrDooxWHCWtfeSxvDvgqZq");

DESUtil.java

package com.util;  import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec;  /**  * DES加解密工具类  *   * @author 王翔宇  *  * @date 2017年7月19日 上午11:03:51  */ public class DESUtil {     private static final String DES_ALGORITHM = "DES";      /**      * DES加密      *       * @param plainData 原始字符串      * @param secretKey 加密密钥      * @return 加密后的字符串      * @throws Exception      */     public static String encryption(String plainData, String secretKey) throws Exception {          Cipher cipher = null;         try {             cipher = Cipher.getInstance(DES_ALGORITHM);             cipher.init(Cipher.ENCRYPT_MODE, generateKey(secretKey));         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();         } catch (NoSuchPaddingException e) {             e.printStackTrace();         } catch (InvalidKeyException e) {          }          try {             // 为了防止解密时报javax.crypto.IllegalBlockSizeException: Input length must             // be multiple of 8 when decrypting with padded cipher异常,             // 不能把加密后的字节数组直接转换成字符串             byte[] buf = cipher.doFinal(plainData.getBytes());             return Base64Utils.encode(buf);         } catch (IllegalBlockSizeException e) {             e.printStackTrace();             throw new Exception("IllegalBlockSizeException", e);         } catch (BadPaddingException e) {             e.printStackTrace();             throw new Exception("BadPaddingException", e);         }     }     /**      * DES解密      * @param secretData 密码字符串      * @param secretKey 解密密钥      * @return 原始字符串      * @throws Exception      */     public static String decryption(String secretData, String secretKey) throws Exception {          Cipher cipher = null;         try {             cipher = Cipher.getInstance(DES_ALGORITHM);             cipher.init(Cipher.DECRYPT_MODE, generateKey(secretKey));         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();             throw new Exception("NoSuchAlgorithmException", e);         } catch (NoSuchPaddingException e) {             e.printStackTrace();             throw new Exception("NoSuchPaddingException", e);         } catch (InvalidKeyException e) {             e.printStackTrace();             throw new Exception("InvalidKeyException", e);          }          try {             byte[] buf = cipher.doFinal(Base64Utils.decode(secretData.toCharArray()));             return new String(buf);         } catch (IllegalBlockSizeException e) {             e.printStackTrace();             throw new Exception("IllegalBlockSizeException", e);         } catch (BadPaddingException e) {             e.printStackTrace();             throw new Exception("BadPaddingException", e);         }     }      /**      * 获得秘密密钥      *       * @param secretKey      * @return      * @throws NoSuchAlgorithmException      * @throws InvalidKeySpecException      * @throws InvalidKeyException      */     private static SecretKey generateKey(String secretKey)             throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException {         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);         DESKeySpec keySpec = new DESKeySpec(secretKey.getBytes());         keyFactory.generateSecret(keySpec);         return keyFactory.generateSecret(keySpec);     }      static private class Base64Utils {         static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="                 .toCharArray();         static private byte[] codes = new byte[256];         static {             for (int i = 0; i < 256; i++)                 codes[i] = -1;             for (int i = ‘A‘; i <= ‘Z‘; i++)                 codes[i] = (byte) (i - ‘A‘);             for (int i = ‘a‘; i <= ‘z‘; i++)                 codes[i] = (byte) (26 + i - ‘a‘);             for (int i = ‘0‘; i <= ‘9‘; i++)                 codes[i] = (byte) (52 + i - ‘0‘);             codes[‘+‘] = 62;             codes[‘/‘] = 63;         }          /**          * 将原始数据编码为base64编码          */         static private String encode(byte[] data) {             char[] out = new char[((data.length + 2) / 3) * 4];             for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {                 boolean quad = false;                 boolean trip = false;                 int val = (0xFF & (int) data[i]);                 val <<= 8;                 if ((i + 1) < data.length) {                     val |= (0xFF & (int) data[i + 1]);                     trip = true;                 }                 val <<= 8;                 if ((i + 2) < data.length) {                     val |= (0xFF & (int) data[i + 2]);                     quad = true;                 }                 out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];                 val >>= 6;                 out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];                 val >>= 6;                 out[index + 1] = alphabet[val & 0x3F];                 val >>= 6;                 out[index + 0] = alphabet[val & 0x3F];             }             return new String(out);         }          /**          * 将base64编码的数据解码成原始数据          */         static private byte[] decode(char[] data) {             int len = ((data.length + 3) / 4) * 3;             if (data.length > 0 && data[data.length - 1] == ‘=‘)                 --len;             if (data.length > 1 && data[data.length - 2] == ‘=‘)                 --len;             byte[] out = new byte[len];             int shift = 0;             int accum = 0;             int index = 0;             for (int ix = 0; ix < data.length; ix++) {                 int value = codes[data[ix] & 0xFF];                 if (value >= 0) {                     accum <<= 6;                     shift += 6;                     accum |= value;                     if (shift >= 8) {                         shift -= 8;                         out[index++] = (byte) ((accum >> shift) & 0xff);                     }                 }             }             if (index != out.length)                 throw new Error("miscalculated data length!");             return out;         }     } }

 

原文:https://www.cnblogs.com/xyhero/p/9344677.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!