lyyb2001

          只是為方便自己找記錄而已
          posts - 57, comments - 27, trackbacks - 0, articles - 5
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理

          登陸用戶名的加密與解密

          Posted on 2015-03-27 10:50 skycity 閱讀(216) 評論(0)  編輯  收藏 所屬分類: J2EE技術
          package com.skycity.framework.utility;
          import javax.crypto.Cipher;
          import javax.crypto.KeyGenerator;
          import javax.crypto.SecretKey;
          import javax.crypto.spec.SecretKeySpec;

          import sun.misc.BASE64Decoder;
          import sun.misc.BASE64Encoder;

          import com.skycity.framework.Constant;

          public class EncryptUtil {
              // 加密字符串
              public static String encryptMode(String keybyte, String src) {
                  try { // 生成密鑰
                      SecretKey deskey = new SecretKeySpec(new BASE64Decoder().decodeBuffer(keybyte), Constant.ALGORITHM); // 加密
                      Cipher c1 = Cipher.getInstance(Constant.ALGORITHM);
                      c1.init(Cipher.ENCRYPT_MODE, deskey);
                      byte[] result = c1.doFinal(src.getBytes());
                      return new BASE64Encoder().encode(result);
                  } catch (java.security.NoSuchAlgorithmException e1) {
                      e1.printStackTrace();
                  } catch (javax.crypto.NoSuchPaddingException e2) {
                      e2.printStackTrace();
                  } catch (java.lang.Exception e3) {
                      e3.printStackTrace();
                  }
                  return null;
              }
           
              // 解密字符串
              public static String decryptMode(String keybyte, String encryStr) {
                  try { // 生成密鑰
                      SecretKey deskey = new SecretKeySpec(new BASE64Decoder().decodeBuffer(keybyte), Constant.ALGORITHM); // 解密
                      Cipher c1 = Cipher.getInstance(Constant.ALGORITHM);
                      c1.init(Cipher.DECRYPT_MODE, deskey);
                      byte[] result = c1.doFinal(new BASE64Decoder().decodeBuffer(encryStr));
                      return new String(result);
                  } catch (java.security.NoSuchAlgorithmException e1) {
                      e1.printStackTrace();
                  } catch (javax.crypto.NoSuchPaddingException e2) {
                      e2.printStackTrace();
                  } catch (java.lang.Exception e3) {
                      e3.printStackTrace();
                  }
                  return null;
              }
              //創建一個密鑰
              public static byte[] createSecretKey() {
          KeyGenerator keygen = null;
          try {
          keygen = KeyGenerator.getInstance(Constant.ALGORITHM);
          SecretKey deskey = keygen.generateKey();
          return deskey.getEncoded();
          } catch (Exception e) {
          LogUtil.error("NoSuchAlgorithmException!");
          }
          return null;
          }
              
              public static void main(String[] args){ 
                  final byte[] keyBytes = createSecretKey();    
                  String key= new BASE64Encoder().encode(keyBytes);
                  String szSrc = "admin";
                  System.out.println("加密前的字符串:" + szSrc);
                  String password = encryptMode(key,szSrc);
                  System.out.println("加密后的字符串:" + password);
          String result = decryptMode(key, password);
                  System.out.println("解密后的字符串:" + result);
              }
          }

          數據庫表中有一個字段用于保存Key,一個字段用于保存password,更改密碼的時候,重新生成一個KEY,然后生成一個PASSWORD,匹配保存到數據庫中。
          當登陸時,用數據庫保存的KEY和password進行解密,然后與登陸時輸入的password進行比較,如果相等,則成功。
          算法支持AES,DES,DESede,Blowfish等算法


          Lyyb2001
          主站蜘蛛池模板: 南充市| 台安县| 巧家县| 金堂县| 鄢陵县| 沁阳市| 双柏县| 九江市| 武宣县| 芮城县| 彭州市| 志丹县| 阜阳市| 长丰县| 恩平市| 敖汉旗| 永城市| 闽侯县| 应用必备| 松溪县| 嘉兴市| 金山区| 甘孜| 沐川县| 广平县| 通江县| 灌南县| 府谷县| 南康市| 疏勒县| 桑植县| 藁城市| 大冶市| 巴中市| 黄浦区| 盐城市| 新丰县| 罗定市| 祥云县| 忻城县| 兴仁县|