zoukankan      html  css  js  c++  java
  • 一个随机数发生器 用于在服务器和客户机直接进行安全性验证的类

    在服务器向客户端提供服务时 有可能页面遭到了修改 但是服务器无法进行验证用户提交的页面是否

    是自己服务器发送页面 那么就可以采用一个随机函数发生器 发送一个字符给客户机 在客户机提交数据

    时进行验证 是否是自己提供的页面 我们可以采取随机数的方式进行这个任务

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Random;
    
    import sun.misc.BASE64Encoder;
    
    import com.sun.mail.util.BASE64EncoderStream;
    
    /*
     * 这里只是希望建立一个随机数发生器 而且只允许外界调用这个随机数发生器
     * 也就是说 这个随机数发生器 不对外提供构造方法 只可以拥有一个实例
     * 外界可以通过静态方法 获取到这个随机数发生器
     */
    public class TokenProcessor {
        /**********************
         * 1.把构造方法私有化
         * 2.自己创建一个实例对象
         * 3.对外暴露实例对象的获取方法
         */
        
        //1.将构造方法实例化
        private TokenProcessor(){};
        
        //2.自己创建一个
        private static final TokenProcessor instance =new TokenProcessor();
        
        //3.对外暴露一个方法 可以用于获取这个实例对象的
        public static TokenProcessor getProcessor(){
            return instance;
        }
        
        public String getGenerateString(){
            /*******************************************************
             *这里出现了一个重要的思想 服务器验证的随机数据产生问题
             *最好是一个和当前时间相关 不太可能会重复的数据 而且带有一定的随机性
             * 
             */
            String token = System.currentTimeMillis()+new Random().nextInt()+" ";
            
            try {
                /*
                 * 关于messageDigest类是为应用程序提供安全信息摘要算法的功能
                 * 如 MD5 或者SHA
                 * 
                 * 这里返回的是提供MD5算法摘要的对象
                 */
                MessageDigest md=MessageDigest.getInstance("md5");
                /*这里是md5算法对象的提供者使用digest()方法 获取token
                 * 这个数据的md5数组 完成哈希计算
                 *  主要这里提供的数据需要先将其转化为byte[]数组
                 */
                byte[] md5=md.digest(token.getBytes());
                
                /*
                 * 接下来需要将字节数组数据转化为字符串 但是如果
                 * 直接new String(md5); 如果没有指定会是GB2312或者ISO-8059-1
                 * 这时候又存在乱码问题
                 * 这时候可以采用base64编码
                 */
                BASE64Encoder encoder =new BASE64Encoder();
                
                return encoder.encode(md5);
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
            
        }
    }

    这是一个静态类 对外提供一个实例对象  可以获取到一个随机函数 进行验证时使用 在用户进行页面请求时发送随机码

    在用户提交时返回这个随机码  

    下面实验一下是否用

    public class TokenDemo {
    
        public static void main(String[] args) {
            TokenProcessor tokenProcessor =TokenProcessor.getProcessor();
            String token=tokenProcessor.getGenerateString();
            System.out.println(token);
        }
    
    }
    恐惧源于无知,代码改变世界
  • 相关阅读:
    定时器的实现
    派遣函数
    IRP的同步
    duilib基本流程
    驱动程序的同步处理
    WFP在包含fwpmu.h头的时候出错
    自己写的驱动用CreateFile打开时错误码返回1的问题
    Windows内核函数
    16_会话技术_Session
    15_会话技术_Cookie
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/8976736.html
Copyright © 2011-2022 走看看