zoukankan      html  css  js  c++  java
  • java中使用MD5进行加密(转)

       在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。
    (一)消息摘要简介
        一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1。

    消息摘要有两个基本属性: 

    1. 两个不同的报文难以生成相同的摘要
    2. 难以对指定的摘要生成一个报文,而可以由该报文反推算出该指定的摘要

    代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5

     配置以下代码的时候可能会报错

    报错:BASE64Encoder cannot be resolved to a type

    解决方法:http://blog.csdn.net/mr_leee/article/details/53081992

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    import sun.misc.BASE64Encoder;
    
    public class MD5 {
          /**利用MD5进行加密
         * @param str  待加密的字符串
         * @return  加密后的字符串
         * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法
         * @throws UnsupportedEncodingException  
         */
        public static String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
            //确定计算方法
            MessageDigest md5=MessageDigest.getInstance("MD5");
            BASE64Encoder base64en = new BASE64Encoder();
            //加密后的字符串
            String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
            return newstr;
        }
        /**判断用户密码是否正确
         * @param newpasswd  用户输入的密码
         * @param oldpasswd  数据库中存储的密码--用户密码的摘要
         * @return
         * @throws NoSuchAlgorithmException
         * @throws UnsupportedEncodingException
         */
        public static boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException{
            if(EncoderByMd5(newpasswd).equals(oldpasswd))
                return true;
            else
                return false;
        }
        public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
            String str="0123456789";
            System.out.println(EncoderByMd5(str));
            System.out.println(checkpassword("0123456789","eB5eJF1ptWaXm4bijSPyxw=="));
        }
    }

    运行结果:

    eB5eJF1ptWaXm4bijSPyxw==
    true

    原文链接:https://www.cnblogs.com/weiwangnuanyang/articles/4326336.html

  • 相关阅读:
    React Native 架构演进
    React Native 架构一览
    React Native 在 Airbnb 的起起落落
    React Native简史
    图解云服务模型的演进
    伯克利研究员们眼中的Cloud Computing
    彻底理解 IaaS、PaaS、SaaS
    JS更随机的随机数
    JS自动化
    fingerprint2 计算浏览器指纹分析
  • 原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/8038406.html
Copyright © 2011-2022 走看看