时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息...

好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接登录而不必再次输入账户,密码等...而通常这样需要Cookie保存用户信息,当然,这个信息是加密信息,且一般都加了时间戳等验证信息的...

登陆时,读取cookie,解析cookie的信息,以及如时间戳等附加信息.如果没有时间戳...那么任何人只要有这个cookie,复制cookie到他的电脑中,然后登陆相同的页面,即便盗用者并不知道用户的信息是什么,也能登陆...

所以,时间戳就类似我们所说的安全令牌.

方式,将用户信息MD5加密后,再将时间戳MD5加密,然后按照特定的处理,将加密后的用户信息以及时间戳,ip地址等信息再次处理,加密后,生成cookie保存客户端...这样就避免了前面所说的安全问题...

Java.security.MessageDigest,在创建安全令牌上,比MD5更简便.因为update方法!!!

  1. package cn.vicky.utils;
  2. import java.security.MessageDigest;
  3. import java.security.NoSuchAlgorithmException;
  4. /**
  5. * 令牌处理器
  6. *
  7. * @author Vicky
  8. * @emial eclipser@163.com
  9. *
  10. */
  11. public class TokenProcessor {
  12. private static TokenProcessor instance = new TokenProcessor();
  13. private long previous;
  14. protected TokenProcessor() {
  15. }
  16. public static TokenProcessor getInstance() {
  17. return instance;
  18. }
  19. public synchronized String generateToken(String msg, boolean timeChange) {
  20. try {
  21. long current = System.currentTimeMillis();
  22. if (current == previous)                current++;
  23. previous = current;
  24. MessageDigest md = MessageDigest.getInstance("MD5");
  25. md.update(msg.getBytes());
  26. if (timeChange) {
  27. // byte now[] = (current+"").toString().getBytes();
  28. byte now[] = (new Long(current)).toString().getBytes();
  29. md.update(now);
  30. }
  31. return toHex(md.digest());
  32. } catch (NoSuchAlgorithmException e) {
  33. return null;
  34. }
  35. }
  36. private String toHex(byte buffer[]) {
  37. StringBuffer sb = new StringBuffer(buffer.length * 2);
  38. for (int i = 0; i < buffer.length; i++) {
  39. sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16));
  40. sb.append(Character.forDigit(buffer[i] & 15, 16));
  41. }
  42. return sb.toString();
  43. }
  44. }

测试

  1. @Test
  2. public void testGenerateToken(){
  3. String token = new TokenProcessor().generateToken("Vicky",true);
  4. System.err.println(token);
  5. String token2 = new TokenProcessor().generateToken("Vicky",false);
  6. System.err.println(token2);
  7. }

执行后打印:

69ff8ae72232da59a613ecc830ed7c7a
020c290593cef84aeac4ea2c269d326d

再次执行打印:

d8e38257652deaa76de81c8225801482
020c290593cef84aeac4ea2c269d326d

可见,第1打印的数据,是一直变换的.因为他加入了时间戳

而第2条打印的数据却是不变的,因为他只是简单的MD5加密

java.security.MessageDigest的使用之生成安全令牌!的更多相关文章

  1. java.security.MessageDigest (2) 生成安全令牌!

    时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息... 好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接 ...

  2. 利用Java自带的MD5加密java.security.MessageDigest;

    MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...

  3. java.security.MessageDigest (1)

    我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky&q ...

  4. 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 ...

  5. 消息摘要java.security.MessageDigest

    这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对 ...

  6. Java Security:Java加密框架(JCA)简要说明

    加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...

  7. Java利用MessageDigest提供的MD5算法加密字符串或文件

    MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...

  8. java中MessageDigest加密工具类

    import java.security.MessageDigest; public class EncryptionKit { public static String md5Encrypt(Str ...

  9. Java security MD5加密算法

    利用java.security对字符串进行MD5加密: import java.security.MessageDigest; import java.security.NoSuchAlgorithm ...

随机推荐

  1. 修改TomCat端口实现多实例

      TomCat默认的端口是8080,还会占用8005,8009和8443端口.如果已经启动了tomcat,再启动一个tomcat会发现这些端口已经被占用了,这个时候就需要修改端口号.   以apac ...

  2. Replication--数据库镜像阻塞复制日志读取器的解决的办法

    问题描述:在同一数据库上使用镜像和复制,为保证镜像切换后,复制还能继续,因此当镜像断开或暂停时,复制日志读取器会被阻塞直到日志被同步到镜像从服务器端(无论异步还是同步).日志状态显示:复制的事务正等待 ...

  3. 在 CentOS 上运行 ZKEACMS

    ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上运行 ZKEACMS. 安装 .Ne ...

  4. ZKEACMS 的两种发布方式

    前言 如果你还不知道ZKEACMS,不妨先了解一下. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来 官方地址:http://www.zkea.net/zkeacms ...

  5. 纯Css3手工打造网页图片效果

    .rotate-demo { width: 220px; height: 220px; margin: 0 auto; background: no-repeat url("http://i ...

  6. 谈谈iOS开发如何写个人中心这类页面--静态tableView页面的编写

    本文来自 网易云社区 . 一.本文讲的是什么问题? 在开发 iOS 应用时,基本都会遇到个人中心.设置.详情信息等页面,这里截取了某应用的详情编辑页面和个人中心页面,如下: 我们以页面结构的角度考虑这 ...

  7. 将yum源更换为阿里的源(脚本)

    #!/bin/bash ######################################### #Function: update source #Usage: bash update_s ...

  8. [Objective-C语言教程]基本语法(4)

    前面已经看到了Objective-C程序的基本结构,因此很容易理解Objective-C编程语言的其他基本构建块. Objective-C令牌 Objective-C程序由各种令牌组成,令牌可以是关键 ...

  9. 常用博客 API地址

    新浪博客 http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php 网易博客 http://os.blog.163.com/ap ...

  10. Excel的公式:锁定某个区域函数--OFFSET()

    OFFSET(标识位置,偏移的行数,偏移的列数,偏移后锁定的行数,偏移后锁定的列数) 打个比方解释:在xy轴上画一个矩形 标识位置:等同于原点; 偏移的行数:矩形的起始y轴坐标; 偏移的列数:矩形的起 ...