lyyb2001

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

          登陸用戶(hù)名的加密與解密

          Posted on 2015-03-27 10:50 skycity 閱讀(210) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EE技術(shù)
          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;
              }
              //創(chuàng)建一個(gè)密鑰
              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);
              }
          }

          數(shù)據(jù)庫(kù)表中有一個(gè)字段用于保存Key,一個(gè)字段用于保存password,更改密碼的時(shí)候,重新生成一個(gè)KEY,然后生成一個(gè)PASSWORD,匹配保存到數(shù)據(jù)庫(kù)中。
          當(dāng)?shù)顷憰r(shí),用數(shù)據(jù)庫(kù)保存的KEY和password進(jìn)行解密,然后與登陸時(shí)輸入的password進(jìn)行比較,如果相等,則成功。
          算法支持AES,DES,DESede,Blowfish等算法


          Lyyb2001
          主站蜘蛛池模板: 自贡市| 灌阳县| 陕西省| 泽州县| 岳阳县| 剑河县| 南川市| 福泉市| 太和县| 义乌市| 靖江市| 滨海县| 武山县| 屏东市| 栾川县| 土默特右旗| 壶关县| 南雄市| 响水县| 陕西省| 磐石市| 富宁县| 尼勒克县| 札达县| 东城区| 朝阳县| 沅陵县| 呈贡县| 西和县| 庆城县| 漾濞| 平顺县| 宝应县| 河间市| 方正县| 黑山县| 抚远县| 沧源| 澄江县| 曲阜市| 青冈县|