java.security.MessageDigest的使用之生成安全令牌!
时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息...
好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接登录而不必再次输入账户,密码等...而通常这样需要Cookie保存用户信息,当然,这个信息是加密信息,且一般都加了时间戳等验证信息的...
登陆时,读取cookie,解析cookie的信息,以及如时间戳等附加信息.如果没有时间戳...那么任何人只要有这个cookie,复制cookie到他的电脑中,然后登陆相同的页面,即便盗用者并不知道用户的信息是什么,也能登陆...
所以,时间戳就类似我们所说的安全令牌.
方式,将用户信息MD5加密后,再将时间戳MD5加密,然后按照特定的处理,将加密后的用户信息以及时间戳,ip地址等信息再次处理,加密后,生成cookie保存客户端...这样就避免了前面所说的安全问题...
Java.security.MessageDigest,在创建安全令牌上,比MD5更简便.因为update方法!!!
- package cn.vicky.utils;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /**
- * 令牌处理器
- *
- * @author Vicky
- * @emial eclipser@163.com
- *
- */
- public class TokenProcessor {
- private static TokenProcessor instance = new TokenProcessor();
- private long previous;
- protected TokenProcessor() {
- }
- public static TokenProcessor getInstance() {
- return instance;
- }
- public synchronized String generateToken(String msg, boolean timeChange) {
- try {
- long current = System.currentTimeMillis();
- if (current == previous) current++;
- previous = current;
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.update(msg.getBytes());
- if (timeChange) {
- // byte now[] = (current+"").toString().getBytes();
- byte now[] = (new Long(current)).toString().getBytes();
- md.update(now);
- }
- return toHex(md.digest());
- } catch (NoSuchAlgorithmException e) {
- return null;
- }
- }
- private String toHex(byte buffer[]) {
- StringBuffer sb = new StringBuffer(buffer.length * 2);
- for (int i = 0; i < buffer.length; i++) {
- sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16));
- sb.append(Character.forDigit(buffer[i] & 15, 16));
- }
- return sb.toString();
- }
- }
- @Test
- public void testGenerateToken(){
- String token = new TokenProcessor().generateToken("Vicky",true);
- System.err.println(token);
- String token2 = new TokenProcessor().generateToken("Vicky",false);
- System.err.println(token2);
- }
执行后打印:
69ff8ae72232da59a613ecc830ed7c7a
020c290593cef84aeac4ea2c269d326d
再次执行打印:
d8e38257652deaa76de81c8225801482
020c290593cef84aeac4ea2c269d326d
可见,第1打印的数据,是一直变换的.因为他加入了时间戳
而第2条打印的数据却是不变的,因为他只是简单的MD5加密
java.security.MessageDigest的使用之生成安全令牌!的更多相关文章
- java.security.MessageDigest (2) 生成安全令牌!
时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息... 好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接 ...
- 利用Java自带的MD5加密java.security.MessageDigest;
MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...
- java.security.MessageDigest (1)
我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky&q ...
- Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils)
依赖于java.security.MessageDigest,支持MD5,SHA-1,SHA-256 import java.security.MessageDigest; import java.s ...
- 消息摘要java.security.MessageDigest
这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对 ...
- Java Security:Java加密框架(JCA)简要说明
加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...
- Java利用MessageDigest提供的MD5算法加密字符串或文件
MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...
- java中MessageDigest加密工具类
import java.security.MessageDigest; public class EncryptionKit { public static String md5Encrypt(Str ...
- Java security MD5加密算法
利用java.security对字符串进行MD5加密: import java.security.MessageDigest; import java.security.NoSuchAlgorithm ...
随机推荐
- DELPHI XE5-8 弹出列表框供选择
点击章节练习: var tmplm:Tlistboxitem; begin dm.FDQTMP.SQL.Clear; dm.FDQTMP.SQL.Add('select GSESSON from TS ...
- CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...
- Sublime Text3 最新版3207 安装及破解
注:原文地址 https://www.abbeyok.com/archives/337 Sublime Text 3最近更新了新版本,最新版本:3207,之前的license无效了,新版破解方法如下: ...
- sql指定值排在前面
示例: SELECT COL1 FROM TABLE1 ORDER BY CASE WHEN COL1 = 'A' THEN 1 ELSE 2 END,COL1;//COL1为A的排在最前面,剩下的按 ...
- [Maven实战-许晓斌]-[第二章]-2.5 Eclipse上面安装Maven插件 m2eclipse
Eclipse上面安装Maven插件 m2eclipse --需要特别指出的是,越来越多的最新的Eclipse版本自带Maven m2e http://m2eclipse.sonatype.org/s ...
- objectARX加载lisp函数、源码的一种方式
//感谢高飞鸟highflybird版主的思路以及研究. //先声明非公开函数acedEvaluateLisp extern int acedEvaluateLisp(const ACHAR*,str ...
- iOS开发之-Debug、Release、Archive、Profile、Analyze
1,Debug和Release版本区别? 众所周知,我们进行iOS开发,在Xcode调试程序时,分为两种方式, Debug 和 Release ,在Target的Setting中相信大家应该看到很多选 ...
- 【FAQ】maven包引入版本引发的问题
pom.xml文件中的 dependency顺序可能会引起jar包版本不一致的问题,越上面越先引入进来
- CentOS 下安装 Hexo 博客
前言: 之前一直使用Wordpress架构作为博客网站架构,但是现在频频爆出漏洞.实在是不敢用也不想用了,然后群里面有小伙伴用的是 Github 搭建 Hexo 架构博客.就写了这个教程,给自己做个参 ...
- 使用beautifulsoup和pyquery爬小说
# -*- coding:UTF-8 -*- from bs4 import BeautifulSoup #BeautifulSoup就是处理字符串的工具 import requests, sys & ...