科帮网-Java论坛、Java社区、JavaWeb毕业设计

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > JAVA使用AES加密用户信息到cookie
总共48085条微博

动态微博

查看: 4802|回复: 2

JAVA使用AES加密用户信息到cookie

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-12-24 14:45:53 |只看该作者 |正序浏览
    1. 因子       AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过java实现AES加密。
    " b; g4 n1 s$ s; W% x# y# p; Z# w2. JAVA实现闲话少许,掠过AES加密原理及算法,关于这些直接搜索专业网站吧,我们直接看JAVA的具体实现。! D( }! ?$ j3 g& n& |- s& T2 i! V
    2.1 加密代码有详细解释,不多废话# H5 d  O% N# K+ A. k5 r% D" ~
    9 ]  l+ H! N* R2 G5 b" D

    科帮网-Java论坛、Java社区、JavaWeb毕业设计 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网-Java论坛、Java社区、JavaWeb毕业设计享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网-Java论坛、Java社区、JavaWeb毕业设计的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网-Java论坛、Java社区、JavaWeb毕业设计管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    板凳
    发表于 2014-12-25 13:51:26 |只看该作者
    CookieUtil 操作类
    ! `( \8 p9 j( M
    1. import java.io.UnsupportedEncodingException;
      4 x0 Y; I4 R' d2 L6 h
    2. import java.net.URLDecoder;8 T% S, Y4 e6 M
    3. import java.net.URLEncoder;
      ; y7 }( D4 Y6 m9 C5 H3 e% ^  ~- g& Z6 }
    4. ( j7 ^4 A# g+ T# \! `2 ], |. n1 m
    5. import javax.servlet.http.Cookie;5 @% ~. e: i, R" R( J
    6. import javax.servlet.http.HttpServletRequest;, ^1 W2 L/ G8 L& P$ }& u
    7. import javax.servlet.http.HttpServletResponse;
      ! s& u9 k& }2 b9 G
    8. /**" u9 e3 P# h! Y4 j6 m2 q
    9. * cookie操作类: ^( ]  q& [# @4 Y, `2 i& G. T
    10. * @author zhangZhiPeng' Z1 j0 D# ^5 Z0 f$ w2 b. k
    11. * @date 2014年12月25日
      / b0 ]$ D  r# G- n8 V2 s' B
    12. */- m) s2 e: _) t" I7 R
    13. public class CookieUtil {
      ' v/ r6 r$ V- x3 {1 Z6 ]. @3 v0 l/ F
    14.         private static String default_path ="/";! q/ d& f! @& B  n$ h9 _. q
    15.         private static int default_age =60*60*60*12*30;1 E% e' {6 D, U' k
    16.     // 设置age
      * S1 {1 {, h# a0 [- n* m/ |8 c$ F
    17.         public static void addCookie(String name,String value,
      * I$ R( G  X& H* |
    18.                         HttpServletResponse response,int age) throws UnsupportedEncodingException{
      : N* u) l/ u2 J) E4 v' U& _# Z2 x( ^* {
    19.                 Cookie cookie = 9 W, Q. H5 b# [6 p* e1 T( u. `; K
    20.                     new Cookie(name,URLEncoder.encode(value,"utf-8"));
      ; M- @4 q. |7 j  Z3 u5 s
    21.                 cookie.setMaxAge(age);
      ( J9 k+ m% n/ L. B7 e: v! v
    22.                 cookie.setPath(default_path);
      ( W% C- V* c/ t+ H7 a$ Q* R
    23.                 response.addCookie(cookie);
      ! m( n# Q' r, r( b: H4 S* Y
    24.                 8 u# u9 g' h# u
    25.         }
      # U* o' Q, m& Z2 g4 t" k, `& Y
    26.         //默认的
      ! l" `+ E* p- X. I& j" L
    27.         public static void addCookie(String name,String value,HttpServletResponse
      % A- ^! E/ s: M9 z0 B. C8 V6 [
    28.                         response) throws UnsupportedEncodingException{
      + h# p. `8 I, y. ?) y3 I, }7 }
    29.                 addCookie(name,value,response,default_age);
      3 ?+ i9 D0 D/ W
    30.                
      " I# c: F6 N, h6 c, I4 n% Z8 c
    31.         }
      : g" T# F& X9 D: ~9 @; W
    32.         public static String findCookie(String name,HttpServletRequest request) ; \2 m0 p+ r, m3 J/ m# D7 _9 C
    33.                throws UnsupportedEncodingException{3 h- b( v* ^% f/ ?# {$ h
    34.                 String value = null;
      " N5 [( f, N/ j( l
    35.                 Cookie[] cookies = request.getCookies();
        N  H3 N0 ]# z4 ]7 E' v8 f
    36.                 if(cookies!=null){
      # O2 {2 f% G1 |6 r3 N! ~
    37.                         for(int i=0;i<cookies.length;i++){/ y: p+ I5 t6 `- l
    38.                                 Cookie cookie = cookies[i];. t* Y& E% i% ]7 M, D/ @! _" A
    39.                                 if(cookie.getName().equals(name)){+ s+ s8 k8 x9 M
    40.                                         value = URLDecoder.decode(cookie.getValue(), "utf-8");, a+ _/ H( c# x* u) J% h2 d. S) h
    41.                                 }7 l) M' g  {1 L- C% r
    42.                         }+ s/ k( d/ b- s& x% |
    43.                 }
      4 |. N$ w$ i6 d; {1 G  E& H
    44.                 return value;
      . p: k6 r9 m; v. D7 L+ J
    45.         }
      ( X' n2 z: Z4 K. ?  y: Z8 b  J: c5 M
    46.         public static void deleteCookie(String name,HttpServletResponse
      - `3 B1 g+ x: g1 j6 C
    47.                         response){
      4 d  j; J5 P$ [' [  {1 W5 D$ I
    48.                 Cookie cookie = new Cookie(name,"");
      + @7 r% N- V+ b; s1 q# ^9 Z3 e1 b
    49.                 cookie.setMaxAge(0);
      4 V0 o# t1 k9 G# I
    50.                 cookie.setPath(default_path);
      4 t% j+ t0 x1 n9 `0 V- V: D' A: R3 U
    51.                 response.addCookie(cookie);: F" }2 T- Y8 M* A8 P! K. M
    52.         }6 `; E9 B: R/ ?! g. r
    53. }
    复制代码
    回复

    使用道具 举报

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    沙发
    发表于 2014-12-25 13:48:17 |只看该作者
    1. /**
      1 s- L* E2 b2 [- d4 p+ p3 J- }
    2. * 加密解密! x/ G- z% S) ]& `
    3. * @author zhangZhiPeng' o% k- A. _0 L0 D
    4. * @date 2014年12月24日
      5 Z, K4 g8 h3 {7 Z' U# O
    5. */1 G" M6 ^5 u% R) l+ e* ?7 T
    6. import java.io.UnsupportedEncodingException;& `+ F4 m% k7 K' H5 Y
    7. import java.security.*;
      ( n0 w7 w5 o: w4 c; T
    8. import java.util.ResourceBundle;
      7 e% @3 j. B; F8 T4 O% N( u

    9. 3 ^" W6 v$ q+ E% u" Z
    10. import javax.crypto.*;% i6 [9 N8 W# _3 g, d/ d3 u- _
    11. import javax.crypto.spec.SecretKeySpec;
      . ^0 m" x# I/ b
    12. public class AESUtil {" A- ?5 L/ B! K
    13.         private static String PASSWORD = "";( N/ B1 i- x2 j  [, K- d" J; E

    14. ( u' y% _" I. j. `) R9 U: m
    15.         static{) q  k* T- G( A, z' p% F
    16.                 ResourceBundle resource = ResourceBundle.getBundle("config");& |, u) G8 c2 z$ k; ]' [
    17.                 PASSWORD = resource.getString("PASSWORD");
      ! g3 M  J2 r# X* k
    18.         }
      4 y% t% E5 j& a" n) R  k1 `0 I
    19.         public static  byte[]  encrypt(String content) {   1 S- Y/ m  e$ h4 W
    20.         try {              % Q0 C8 y- [6 ]0 k3 D
    21.                 KeyGenerator kgen = KeyGenerator.getInstance("AES"); //KeyGenerator提供(对称)密钥生成器的功能。使用getInstance 类方法构造密钥生成器。* u5 E  @, B( y  |
    22.            kgen.init(128, new SecureRandom(PASSWORD.getBytes()));//使用用户提供的随机源初始化此密钥生成器,使其具有确定的密钥大小。
      & k$ b4 r& C1 `3 e1 g
    23.            SecretKey secretKey = kgen.generateKey();   
      1 y1 {: Y/ y% g
    24.                 byte[] enCodeFormat = secretKey.getEncoded();   7 ^! `) Z, X/ v
    25.                 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");//使用SecretKeySpec类来根据一个字节数组构造一个 SecretKey,,而无须通过一个(基于 provider 的)SecretKeyFactory.  d2 U* D$ O$ _% |+ ]; Z: e
    26.                 Cipher cipher = Cipher.getInstance("AES");// 创建密码器   //为创建 Cipher 对象,应用程序调用 Cipher 的 getInstance 方法并将所请求转换 的名称传递给它。还可以指定提供者的名称(可选)。
      4 d& ~# u) T& U9 N
    27.            byte[] byteContent = content.getBytes("utf-8");   5 ]4 H3 |3 l$ D9 f
    28.                 cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化   4 d; ~7 _& W0 I6 R9 e+ Y3 Y' Q4 V) B
    29.            byte[] result = cipher.doFinal(byteContent); //按单部分操作加密或解密数据,或者结束一个多部分操作。数据将被加密或解密(具体取决于此 Cipher 的初始化方式)。
        i5 n' j9 O, S) t* ^2 @
    30.            return result; // 加密   
      % x7 q# X% w3 S& a4 x
    31.         } catch (NoSuchAlgorithmException e) {   ) f3 N% P8 G7 d# w& z! m
    32.                 e.printStackTrace();   
      9 P% z, x( ~  `. Z2 |. ^
    33.         } catch (NoSuchPaddingException e) {   ( F8 E# g+ d4 \4 l, E+ v% l
    34.                 e.printStackTrace();   
      . V, q* X0 R6 ^9 N, y8 t* o* O. K
    35.         } catch (InvalidKeyException e) {   
      " ~& l2 }1 i* U6 Z: F. S/ ?
    36.                 e.printStackTrace();   5 j2 C! P) E1 [+ P% M% B& I
    37.         } catch (UnsupportedEncodingException e) {   3 v8 S/ ], ]' e- K
    38.                 e.printStackTrace();   ; k$ N! T5 e# ?" H
    39.         } catch (IllegalBlockSizeException e) {     ]3 y6 ?5 ?2 W3 Y" ]2 A
    40.                 e.printStackTrace();   3 a6 e$ `2 ^- {$ E& V
    41.         } catch (BadPaddingException e) {     Z2 e3 O4 U" U4 {# I; Z0 p
    42.                 e.printStackTrace();   
      & }7 ^1 \8 J+ Y( {
    43.         }   
      5 T4 g. ~: t3 u& h+ m" U; {
    44.         return null;   2 S# y# H, q/ B7 i, W
    45.         } ! e) a$ ^- B! }+ D; M4 I' f, W
    46.         public static byte[]   decrypt(byte[] content) {   
      7 _- t- L4 Q0 Q2 N2 m/ s0 n5 Q  _
    47.                 try {6 Q1 A& e; C; e3 G2 N0 u$ f
    48.                     KeyGenerator kgen = KeyGenerator.getInstance("AES");   
      & y$ {5 o  P9 q$ Z1 u; `: P6 V
    49.                     kgen.init(128, new SecureRandom(PASSWORD.getBytes()));   5 L* c- x: w, [7 S5 o  g
    50.                     SecretKey secretKey = kgen.generateKey();   ) n0 N3 N9 G2 H$ ]8 U
    51.                     byte[] enCodeFormat = secretKey.getEncoded();   
      ' R# R7 @& ~% m' i& v1 |
    52.                     SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");               8 j) g1 d. Q  Y; X4 P' Z
    53.                     Cipher cipher = Cipher.getInstance("AES");// 创建密码器   3 g- c" {. v8 e4 f# N' l
    54.                     cipher.init(Cipher.DECRYPT_MODE, key);// 初始化   . }, N) D  s, Q# V. X3 r8 v
    55.                     byte[] result = cipher.doFinal(content);   
      5 b) k7 O' c5 _! d. q; h
    56.                     return result; // 加密   ; M" |/ g+ y/ ^: c4 \  v/ J
    57.                 } catch (NoSuchAlgorithmException e) {   
      $ O2 p+ [$ p& U9 E
    58.                     e.printStackTrace();   
      8 X- w& |* q, C0 G. V! [1 j* ^& T
    59.                 } catch (NoSuchPaddingException e) {   
      ( i% a( D4 d1 k
    60.                     e.printStackTrace();   
      * g) t- A7 r$ ]: q3 v
    61.                 } catch (InvalidKeyException e) {   
      ! ^# J" ?# N3 u4 x
    62.                     e.printStackTrace();   
      $ |: e3 _$ g% ~' X  ]
    63.                 } catch (IllegalBlockSizeException e) {   
      + S9 l0 H" ~' U" T- }
    64.                         e.printStackTrace();   
      7 i- q! r/ p$ b. D6 Y% a
    65.                 } catch (BadPaddingException e) {   " }4 f4 p1 `' R- e5 `
    66.                         e.printStackTrace();   ! l% o$ [: o( J" x
    67.                 }   
      5 k8 Y% x6 f+ J0 o- A8 r
    68.                 return null;   4 y! U7 i2 C; ~4 r
    69.                 }. Q/ w- c" k- a; r8 f
    70.         /**将二进制转换成16进制 " t, \' N6 P/ Z
    71.          * @param buf   E  V. Q; ]* z7 \% a: D. K8 v* M5 ?
    72.          * @return
      - O0 v# Z. X8 H2 O- Q+ S1 j9 `
    73.          */  # z( {+ l  U% q' P5 f1 r, X
    74.         public static String parseByte2HexStr(byte buf[]) {  
      + P" s# d! T2 }  F* Y
    75.                 StringBuffer sb = new StringBuffer();  * O% w4 s+ W/ X6 e
    76.                 for (int i = 0; i < buf.length; i++) {  0 |1 i! A; r% b
    77.                         String hex = Integer.toHexString(buf[i] & 0xFF);  
      ' v6 e- m, o- `5 A
    78.                         if (hex.length() == 1) {  
      4 F' {: C! l7 A% H
    79.                                 hex = '0' + hex;  8 l! K. o5 m% T' x( }/ b9 m5 }
    80.                         }  $ ^2 X6 e. z6 X: B% E
    81.                         sb.append(hex.toUpperCase());  * H6 W! r, r1 r& [; `
    82.                 }  
      8 Q7 s0 n  g" f6 z* F
    83.                 return sb.toString();  
      4 u" l  J8 C# w- C: z
    84.         }  2 F4 Q+ H1 s% T; {: z4 j
    85.         /**将16进制转换为二进制
      2 A: n4 g; P; k6 Z# f" v0 i
    86.          * @param hexStr $ |, v% z- A& S& ~6 J7 J: k
    87.          * @return
      9 M; M3 G$ l0 ?  }9 ~" |" _1 f
    88.         */  5 {9 L4 P( B3 v5 F" S4 `
    89.         public static byte[] parseHexStr2Byte(String hexStr) {  
      7 K+ s+ x/ @$ @4 t. w& l% w* D+ n; ~' ^4 p
    90.                 if (hexStr.length() < 1)  . P0 r3 c; P4 |
    91.                         return null;  . s% Q1 ]' v- K. Y% }
    92.                 byte[] result = new byte[hexStr.length()/2];  " l, u$ A+ a& i, P) ~
    93.                 for (int i = 0;i< hexStr.length()/2; i++) {  ( t# G* |7 o3 v- i
    94.                         int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);  - j( u4 T( x0 C% Y! P0 H
    95.                         int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);  ! y- t& I0 b. f6 _
    96.                         result[i] = (byte) (high * 16 + low);  + u, J# Z: g8 f! q1 A1 b
    97.                 }  3 }* {% n' \8 H5 N2 c8 [$ y
    98.                 return result;  
      4 ^- t! `: F8 T" V/ [
    99.         }  " k. A" `6 l  z& q% k. Y
    100.         //测试
      , G4 a1 P: O% ^, m1 L/ _4 I) _
    101.         public static void main(String[] args) {
      9 o) K4 q6 p1 E
    102.             String content = "test";  
      4 L' J9 F7 q+ x# J
    103.                 //加密   * n. _. o: h$ Y9 O$ q
    104.                 System.out.println("加密前:" + content);  8 Y' I; v0 q: U9 u$ v: \
    105.                 byte[] encryptResult = encrypt(content);  , p' u  k( z# `! E; |0 F% W$ s9 j
    106.                 String encryptResultStr = parseByte2HexStr(encryptResult);  2 V+ O# I, n4 S4 a
    107.                 System.out.println("加密后:" + encryptResultStr);  
      & U, v% p1 j5 a# d$ ^$ f* q
    108.                 //解密   
      2 F" u1 D! ]8 J' \" H
    109.                 byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);  & z0 Y' M, C/ q7 [+ z
    110.                 byte[] decryptResult = decrypt(decryptFrom);  " l1 P9 O! G" ~( M; M) s
    111.                 System.out.println("解密后:" + new String(decryptResult));  
      & L/ E  y1 w+ c; @; N/ a/ q
    112. 2 J8 W6 p7 c/ R/ Z5 k6 f/ {) h$ V
    113.         }, m+ A7 a/ B0 `; `, x, p% l: K
    114. }
    复制代码
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表