Java加密技术(1)

目录

1,Java加密技术

2,使用MD5加密

3,MD5的原理

4,实战


1,Java加密技术

   本节将重点讲解JAVA中各种常见的加密技术的基本概念和实现方法,但详细的数学推导过程并没有列出。对加密所涉及的数学计算过程感兴趣的话,可去阅读其他博客。

2,使用MD5加密

    MD5加密算法,英文全称为"Message-Digest Algorithm 5",可将任意长度的数据加密并压缩成另一固定长度的数据值。

    MD5加密算法属于单向加密技术,即加密过程不可逆,根据加密后的值无法计算出原始数据。也就是说MD5加密无法被解密。这是因为MD5使用了散列哈希函数,在计算过程中,部分数据信息是丢失的,从原数据计算出md 5数值很容易,但逆向计算一个MD5值会对应多出个原数据,所以伪造数据也是非常困难的。

3,MD5的原理

     MD5加密算法基本原理为:先将原始数据进行填充处理为512位的整数倍的数据,然后以每五12为一组进行循环计算,将前一组得到的182bit的MD5值为下一个分组输入的参数进行计算,循环计算后最终得到的182bit的值以为最终的MD5值。

4,实战

    Java 8中提供了md 5加密算法的实现开发中可直接使用。

import java.math.BigInteger;
import java.security.MessageDigest;
/**
*MD5加密
*/
public class MD5Encrytion{
    public static vcid main(String[] args){
    String str = "广东靓仔";
    try{
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(syr.getBytes());
        System.out.println(str+"MD5加密后内容为:");
        System.out.println(new BigInteger(1,md.digest()).toString(16));
    } catch(Exception e){
        e.printStackTrace();
        
        }

    }
}
 

上面列示中,使用MD5对数据“广东靓仔”进行加密后得到MD5值如下所示:

广东靓仔MD5加密后内容为:
4a90d6171ad6656a5f185404778b174f

由于MD5不可逆向解密的特性,它被广泛应用于密码验证和数据完整性的验证在使用,一般将会用注册用户的密码通过MD5加密后存储到数据库中;当用户登录时,通过验证MD5来检查用户输入密码的正确性。

public enum UserEnum {
    USER_A("userA","781e5e245d69b566979b86e28d23f2c7"),
    USER_B("userB","1388c1c5df4933fa01f6da9g92595589"),
    private String name;
    privste String password;
    privstr UserEunm(String name,String password){
        this.name=name;
        this.passord=passord;
    }
    public String getName()
        return name;
    }
    public static String getPassord(String name){
        for(UserEunm user : UsreEunm.values())
            if(user.getName().eqals(name)){
                returtn user.password;
            }
        }
        return null;
    }
}
import java.math.BigInteger;
import java.secrity.MessageDigest;

public class MD5Encrytion{
    public static void main(Srting[] args){
        Srting userAPassord="0123456789";
        Siring userBPassord="9876543210";
            System.out.println("用户A登录是否成功:"+md5Encryp(userAPassord).equals(getPasswoldFromDB("userA")))
    System.out.println("用户B是否登录成功:"+md5Encryp(userBPassord).equals(getPasswoldFromDB("userB"))))
    }

    public static String md5Encryp(String str){
        try{
            MessageDigest md = MessaegDigest.getInstance("MD5");
            md.update(str.getBytes());
            return new BigInteger(1,md,digest());
        { catch (Exception e){
            e.ptintStackTrace();
        }
        return.null;
    }
    public static String getPasswordFromDB(String name){
        return UserEnum.getPassword(name);
         }
      }
   }

}

运行结果为:

用户A登录是否成功:true
用户B登录是否成功:false

额~这个还是不戳的。

 虽然MD5具有这些优点,但是MD5加密算法不是绝对的安全,比如用户设置密码的场景,如果密码设置过于简单,破解者可通过穷举法对MD5加密进行暴力破解,而且目前市面上已经有很多商业化的MD5字典库,其中收集大量原始数据,一般不复杂的密码都可以直接在其中找到原文和加密后的MD5值使破解更容易。

 开发者不仅需要考虑MD5值的存储安全性,也需要考虑如何加密过程更安全,比如最简单的操作是对md无数据再次进行MD5加密,或者使用其他方法加密,这样即使泄露了也会加大破解难度和破解时间。

还有小编用的是pc

(推荐新手使用)

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值