lyyb2001

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

          登陸用戶名的加密與解密

          Posted on 2015-03-27 10:50 skycity 閱讀(216) 評論(0)  編輯  收藏 所屬分類: 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)建一個密鑰
              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ù)庫表中有一個字段用于保存Key,一個字段用于保存password,更改密碼的時候,重新生成一個KEY,然后生成一個PASSWORD,匹配保存到數(shù)據(jù)庫中。
          當?shù)顷憰r,用數(shù)據(jù)庫保存的KEY和password進行解密,然后與登陸時輸入的password進行比較,如果相等,則成功。
          算法支持AES,DES,DESede,Blowfish等算法


          Lyyb2001
          主站蜘蛛池模板: 江安县| 安西县| 和平区| 休宁县| 锡林浩特市| 淮安市| 天祝| 雅江县| 乐平市| 固始县| 宜州市| 延川县| 深州市| 庆云县| 梁平县| 平南县| 崇信县| 安乡县| 江川县| 泸定县| 郯城县| 石景山区| 合水县| 鹿邑县| 裕民县| 渭南市| 陵川县| 太仆寺旗| 林芝县| 三门县| 彝良县| 乐东| 长子县| 滕州市| 平南县| 佛坪县| 武定县| 凌海市| 芮城县| 云和县| 阿荣旗|