• MD5加密与Hash加密


    一.Md5加密

    MD5算法具有以下特点:
    1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    2、容易计算:从原数据计算出MD5值很容易。
    3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1RIPEMD以及Haval等。
     
    MD5 是非对称的加密算法(PS:对称加密就是加密用的密码和解密用的密码是一样的,非对称就是加密和解密用的密钥不一样)
     
     1 实现代码:
     2 public class MD5 {
     3     /**
     4      * MD5方法
     5      * 
     6      * @param text 明文
     7      * @param key 密钥
     8      * @return 密文
     9      * @throws Exception
    10      */
    11     public static String md5(String text, String key) throws Exception {
    12         //加密后的字符串
    13         String encodeStr=DigestUtils.md5Hex(text + key);
    14         System.out.println("MD5加密后的字符串为:encodeStr="+encodeStr);
    15         return encodeStr;
    16         }
    17 
    18 }

    二.Hash加密

    1. hashcode值是int的,64位。int hashCode()。
    2. java object类默认的hashcode()计算方法是根据对象的内存地址来计算的。所以可由此来判断默认不重写hashcode()方法的两个对象是否相同。
    3. 可重写obejetc 类的hashCode()方法,去根据object对象的实际内容生成hashcode值,比如String类,改写了hashcode(),根据string字符串的内容区生成hashcode,而非根据object类默认的内存地址。
    4.hashcode值是64为int值。hashcode值是不可逆的,即无法根据hashcode值反推原值。但要注意:hashcode是可能重复的,及不同的原始值,可能hashcode相同。这也就是为什么hashmap还有个equal()方法来判断两个值是否相等。

     1 public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
     2 
     3     
     4     String ps = "111111ieou";
     5 
     6     MessageDigest messageDigest;
     7     messageDigest = MessageDigest.getInstance("SHA-256");
     8     messageDigest.update(ps.getBytes("UTF-8"));
     9     String encodeStr = byte2Hex(messageDigest.digest());
    10 
    11     System.out.println(encodeStr);
    12 
    13 }
    14 
    15 private static String byte2Hex(byte[] bytes) {
    16     StringBuilder stringBuffer = new StringBuilder();
    17     String temp = null;
    18     for (int i = 0; i < bytes.length; i++) {
    19         temp = Integer.toHexString(bytes[i] & 0xFF);
    20         if (temp.length() == 1) {
    21         //byte转16进制若结果是一位的进行补0操作
    22             stringBuffer.append("0");
    23         }
    24         stringBuffer.append(temp);
    25     }
    26     return stringBuffer.toString();
    27 }

  • 相关阅读:
    Burp
    SQL注入
    网络安全没有“银弹”
    Centos7
    虚拟机的使用流程
    虚拟机安装流程
    nmap指令
    UDP 服务器和客户端实例,实现2个客户端通过UDP服务器打洞穿透
    c++ win32下窗口的最小化到托盘以及还原
    基于百度OCR的图片文字识别
  • 原文地址:https://www.cnblogs.com/wang-yaz/p/10364984.html
Copyright © 2020-2023  润新知