保存登录信息的Cookie加密技术

所有需要账户登录的website 基本都会想到这样一个问题, 如何保持用户在一定时间内登录有效。

最近本人就在项目中遇到这样的需求,某些页面只能Admin账户登录后访问, 当登录Admin账户后如何才能保持登录信息呢?

用Cookie或者Session来保存登录信息已经是一种比较成熟的技术。但是对于账户信息如果把明文放在Cookie里面显然是非常危险的。

今天给大家分享一下自己在项目中用到的一些加密解密技术。

Cookie 是以key-value的形式存数据。对于账户信息而言最简单的是 UserName 和 Password

如果以明文的形式放到Cookie 比如

UserName=fakeUser

Password=fakePsd

考虑到安全性的问题,显然没有任何website会这样做。

那么是否可以把这几个字段都加密呢?

对 Key 的加密

对key字段像UserName, Password只需要在Server端加密并保存即可,甚至都无需还原成明文。

例如计算出UserName 和 Password的 MD5 hash 值,Cookie形式就可以表示成

ee11cbb19052e40b07aac0ca060c23ee=fakeUser

5f4dcc3b5aa765d61d8327deb882cf99=fakePsd

相比没有加密前安全性是不是高了那么一点点,但这肯定还是不够。我们最终的目标是对所有字段加密。

对Value的加密

对value字段加密就不能是单向的,试想一下如果在Server端对用户名加密放到Cookie再传到Client端, 看起来OK. 当Client端的cookie再传回Server端时,如果不能解密Encode后的用户名那么Cookie就等于失效了。

一个非常简单的算法就是用过异或来实现加密解密,比如提供一个秘钥 X,

encode_data = data ^ X

decode_data = encode_data ^ X

则 data == decode_data.

目前 .NET 提供不了不少对称加密算法都直接以dll 的形式给出了。.NET 中提供的对称加密算法都继承基类SymmetricAlgorithm

具体代码可以直接调用他们的子类像

MSDN 上已经提供了的代码案例,这里就不再给出Test Sample.

为了能够灵活的运用到项目中本人就封装了一些接口

最后可以这样调用

最后Cookie形式就可以表示成

ee11cbb19052e40b07aac0ca060c23ee=EgkCFnUaFlI

5f4dcc3b5aa765d61d8327deb882cf99=vDwCZGvezDfudh91hRsiow

Original: https://www.cnblogs.com/VectorZhang/p/5425283.html
Author: 禅宗花园…迷失的佛
Title: 保存登录信息的Cookie加密技术

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572578/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 在图片上指定区域写文字,超过长度自动换行

    public static void main(String[] args) throws IOException { BufferedImage bufferedImage = …

    Java 2023年6月5日
    074
  • Spring启动流程整理

    spring启动流程 1 new Context(config.class) 会进入构&am…

    Java 2023年6月5日
    0102
  • SSM框架的整合

    B站楠哥的笔记 视频链接:https://www.bilibili.com/video/BV1hE411F77L 学习SSM框架的整合 SSM框架整合 Spring + Sprin…

    Java 2023年6月7日
    092
  • Synchronized锁及其膨胀

    在并发编程中, synchronized锁因其使用简单,在线程间同步被广泛应用。下面对其原理及锁升级过程进行探究。 当实例方法被synchronized修饰时,通过当前实例调用此方…

    Java 2023年6月6日
    076
  • Google搜索为什么不能无限分页?

    这是一个很有意思却很少有人注意的问题。 当我用Google搜索 MySQL这个关键词的时候,Google只提供了 13页的搜索结果,我通过修改url的分页参数试图搜索第 14页数据…

    Java 2023年6月7日
    082
  • 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合

    先看我们最后实现的一个效果 1.手机端向主题 topic111 发送消息,并接收。(手机测试工具名称:MQTT调试器) 2.控制台打印 MQTT基本简介 MQTT 是用于物联网 (…

    Java 2023年6月13日
    077
  • 25.客户端多线程分组模拟高频并发数据

    两种结构的客户端对比网络消息性能 服务端均为单线程服务端。 1.单线程客户端,1000个连接 2.多线程客户端,4个线程,每个线程250个连接 结论:多线程的客户端,网络性能提升非…

    Java 2023年5月29日
    070
  • Java-驼峰命名与下划线命名互转

    package com.xsh.util; /** * String工具类 * * @author xieshua…

    Java 2023年6月5日
    094
  • redis 基于SpringBoot Reids 的工具类

    redis 基于SpringBoot Reids 的工具类 package com.mhy.springredis.utils; import org.springframewor…

    Java 2023年6月16日
    085
  • java算法计算一元一次方程

    java算法计算一元一次方程是昨年10月写的了,最近想写写算法就把它整理出来了。 核心思想是将方程转化为:aX+b = cX+d 的形式再进行计算,转化的思想是根据符号的优先级一层…

    Java 2023年5月29日
    078
  • js session失效退出iframe

    // 代码加入登陆页面中 if( window.top != window.self ){ window.top.location = window.location.href; …

    Java 2023年5月30日
    086
  • DBeaver下载安装与连接MySQL数据库

    一、Dbeaver下载 官网下载地址:Download | DBeaver Community 点击”Windows 64 bit (installer)”…

    Java 2023年6月8日
    0197
  • 事务的隔离级别详解

    四种隔离级别: READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更, 可能会导致脏读、幻读或不可重复读 。 READ-COMMITTED(…

    Java 2023年6月5日
    0102
  • Java项目实战——瑞吉外卖Day05

    套餐管理业务开发 新增套餐 需求分析 套餐就是菜品的集合。 后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,…

    Java 2023年5月29日
    085
  • 关于锁的基础知识

    1、synchronized作用于静态方法和非静态方法的区别非静态方法:给对象加锁(可以理解为给这个对象的内存上锁,注意:只是这块内存,其他同类对象都会有各自的内存锁),这时候在其…

    Java 2023年6月5日
    087
  • 实时离线一体大数据在资产租赁saas服务中使用

    流水查询需求 需求第一期: 基于TB级的在线数据,支持缴费帐单明细在线查询。大家都知道,像银行帐单流水一样,查几年的流水是常有的事。 支持的维度查询:帐期、欠费状态、日期范围、费用…

    Java 2023年6月6日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球