1. public class CookieUtil {
  2.  
  3. /**
  4. *
  5. * @param response HttpServletResponse类型的响应
  6. * @param cookie 要设置httpOnly的cookie对象
  7. */
  8. public static void addHttpOnlyCookie(HttpServletResponse response,
  9. Cookie cookie) {
  10. // 判断对象是否存在null的情况
  11. if (checkObjIsNull(response) || checkObjIsNull(cookie)) {
  12. return;
  13. }
  14.  
  15. //依次取得cookie中的名称、值、最大生存时间、路径、域和是否为安全协议信息
  16. String cookieName = cookie.getName();
  17. String cookieValue = cookie.getValue();
  18. int maxAge = cookie.getMaxAge();
  19. String path = cookie.getPath();
  20. String domain = cookie.getDomain();
  21. boolean isSecure = cookie.getSecure();
  22.  
  23. StringBuffer strBufferCookie = new StringBuffer();
  24. strBufferCookie.append(cookieName + "=" + cookieValue + ";");
  25.  
  26. if (maxAge >= 0) {
  27. strBufferCookie.append("Max-Age=" + maxAge + ";");
  28. } else {
  29. strBufferCookie.append("Max-Age=25;");
  30. }
  31.  
  32. if (!checkObjIsNull(domain)) {
  33. strBufferCookie.append("domain=" + domain + ";");
  34. }
  35.  
  36. if (!checkObjIsNull(path)) {
  37. strBufferCookie.append("path=" + path + ";");
  38. }
  39.  
  40. if (isSecure) {
  41. strBufferCookie.append("HttpOnly;Secure;");
  42. } else {
  43. strBufferCookie.append("HttpOnly;");
  44. }
  45.  
  46. response.addHeader("Set-Cookie", strBufferCookie.toString());
  47. }
  48.  
  49. private static boolean checkObjIsNull(Object obj) {
  50. if (obj == null) {
  51. return true;
  52. }
  53. return false;
  54. }
  55.  
  56. /**
  57. * cookie中的值加密
  58. */
  59. public static String encodeCookie(String value){
  60. String encode = "";
  61. byte bytes[];
  62. try {
  63. bytes = value.getBytes("utf-8");
  64. encode = encode_base64(bytes,bytes.length);
  65. } catch (UnsupportedEncodingException e) {
  66. e.printStackTrace();
  67. }
  68. return encode;
  69. }
  70. /**
  71. * cookie中值解密
  72. */
  73. public static String decodeCookie(String value){
  74. byte bytes[];
  75. String decode = "";
  76. try {
  77. bytes = decode_base64(value,10);
  78. decode = new String(bytes,"UTF-8");
  79. } catch (UnsupportedEncodingException e) {
  80. e.printStackTrace();
  81. }
  82. return decode;
  83. }
  84.  
  85. static private final char base64_code[] = {
  86. '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  87. 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
  88. 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
  89. 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
  90. 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
  91. '6', '7', '8', '9'
  92. };
  93.  
  94. // Table for Base64 decoding
  95. static private final byte index_64[] = {
  96. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  97. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  98. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  99. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  100. -1, -1, -1, -1, -1, -1, 0, 1, 54, 55,
  101. 56, 57, 58, 59, 60, 61, 62, 63, -1, -1,
  102. -1, -1, -1, -1, -1, 2, 3, 4, 5, 6,
  103. 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
  104. 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
  105. -1, -1, -1, -1, -1, -1, 28, 29, 30,
  106. 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  107. 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
  108. 51, 52, 53, -1, -1, -1, -1, -1
  109. };
  110. private static String encode_base64(byte d[], int len) throws IllegalArgumentException {
  111. int off = 0;
  112. StringBuffer rs = new StringBuffer();
  113. int c1, c2;
  114.  
  115. if (len <= 0 || len > d.length)
  116. throw new IllegalArgumentException ("Invalid len");
  117.  
  118. while (off < len) {
  119. c1 = d[off++] & 0xff;
  120. rs.append(base64_code[(c1 >> 2) & 0x3f]);
  121. c1 = (c1 & 0x03) << 4;
  122. if (off >= len) {
  123. rs.append(base64_code[c1 & 0x3f]);
  124. break;
  125. }
  126. c2 = d[off++] & 0xff;
  127. c1 |= (c2 >> 4) & 0x0f;
  128. rs.append(base64_code[c1 & 0x3f]);
  129. c1 = (c2 & 0x0f) << 2;
  130. if (off >= len) {
  131. rs.append(base64_code[c1 & 0x3f]);
  132. break;
  133. }
  134. c2 = d[off++] & 0xff;
  135. c1 |= (c2 >> 6) & 0x03;
  136. rs.append(base64_code[c1 & 0x3f]);
  137. rs.append(base64_code[c2 & 0x3f]);
  138. }
  139. return rs.toString();
  140. }
  141. private static byte char64(char x) {
  142. if ((int)x < 0 || (int)x > index_64.length)
  143. return -1;
  144. return index_64[(int)x];
  145. }
  146. private static byte[] decode_base64(String s, int maxolen) throws IllegalArgumentException {
  147. StringBuffer rs = new StringBuffer();
  148. int off = 0, slen = s.length(), olen = 0;
  149. byte ret[];
  150. byte c1, c2, c3, c4, o;
  151.  
  152. if (maxolen <= 0)
  153. throw new IllegalArgumentException ("Invalid maxolen");
  154. while (off < slen - 1 && olen < maxolen) {
  155. c1 = char64(s.charAt(off++));
  156. c2 = char64(s.charAt(off++));
  157. if (c1 == -1 || c2 == -1)
  158. break;
  159. o = (byte)(c1 << 2);
  160. o |= (c2 & 0x30) >> 4;
  161. rs.append((char)o);
  162. if (++olen >= maxolen || off >= slen)
  163. break;
  164. c3 = char64(s.charAt(off++));
  165. if (c3 == -1)
  166. break;
  167. o = (byte)((c2 & 0x0f) << 4);
  168. o |= (c3 & 0x3c) >> 2;
  169. rs.append((char)o);
  170. if (++olen >= maxolen || off >= slen)
  171. break;
  172. c4 = char64(s.charAt(off++));
  173. o = (byte)((c3 & 0x03) << 6);
  174. o |= c4;
  175. rs.append((char)o);
  176. ++olen;
  177. }
  178.  
  179. ret = new byte[olen];
  180. for (off = 0; off < olen; off++)
  181. ret[off] = (byte)rs.charAt(off);
  182. return ret;
  183. }
  184.  
  185. public static void main(String[] args) {
  186. encodeCookie("admin");
  187. // [97, 100, 109, 105, 110]
  188. // [97, 100, 109, 105, 110]
  189. decodeCookie("WUPrYU2");
  190. }
  191. }

  

Cookie中存放数据l加密解密的算法的更多相关文章

  1. iOS中使用RSA对数据进行加密解密

    RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...

  2. 使用 GPG 对数据进行加密解密签名

    一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...

  3. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...

  4. asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。

    原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...

  5. php中base64_decode与base64_encode加密解密函数

    php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...

  6. 重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类

    原文:重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类 [源码下载] 重新想象 Windows 8 Store Apps (32) - 加密 ...

  7. 使用python进行加密解密AES算法

    使用python进行加密解密AES算法-代码分享-PYTHON开发者社区-pythoner.org 使用python进行加密解密AES算法 TY 发布于 2011-09-26 21:36:53,分类: ...

  8. C#中的三种 加密解密

    刚刚学会的C#的加密与解密(三种)MD5加密/RSA加密与解密/DES加密.也是刚刚申请的blog随便发布一下. (一).MD5加密 MD5 md5 = new MD5CryptoServicePro ...

  9. [转] Java中对数据进行加密的几种方法

    加密算法有很多种:这里只大约列举几例: 1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹.MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要, ...

随机推荐

  1. 给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。

    题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在s ...

  2. 移动端tab目录(有待完善)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  3. Solr 6.7学习笔记(03)-- 样例配置文件 solrconfig.xml

    位于:${solr.home}\example\techproducts\solr\techproducts\conf\solrconfig.xml <?xml version="1. ...

  4. Pycharm 设置TextStyle

    之前在脚本中选择了一个字符串, PyCharm会"高亮"所有相同的字符串, 但是我不满意这个"高亮"的颜色,因为和背景色太相似了,所以需要做一下操作,修改这个& ...

  5. 内置对象(Math对象、Date对象、Array对象、String对象)常用属性和方法

    Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造函数.  Math 的所有属性和方法都是静态的. 跟数学 ...

  6. InstelliJ IDEA使用js+servlet+ajax入门

    对于Ajax,我们先了解三点(完整的JS代码在后面) 一.Ajax的出现对javascript的影响. Ajax是微软提出的一种允许客户端脚本发送HTTP请求的技术(XMLHTTP),拯救了大多数ja ...

  7. 字符串前面u,r,b

    u :代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:py3当对字符串进行操作的时候,默认使用Unicode编码 r/R:非转义的原始字符 ...

  8. PAT甲级——1107 Social Clusters (并查集)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90409731 1107 Social Clusters (30  ...

  9. [题解]luogu_P2155_BZOJ_2186沙拉公主的困惑

    题意求1~N!中与M!互质的数的个数, 首先证明gcd(a,b)=1时gcd(a-kb,b)=1 gcd(a,b)=1 gcd(a%b,b)=1 gcd(a-kb,b)=1 即a-kb与b互质 这样由 ...

  10. python进程之理论

    ********进程理论知识******** ****操作系统背景知识**** 顾名思义,进程及正在执行的一个过程,进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念, ...