Md5加密

package com.tcwl.vsmp.utils;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * 
 * @author Administrator
 *
 */
public class DecriptUtil
{

    /**
     * 对字符串进行sha1加密
     * @param decript 参数
     * @return 结果
     */
    public static String sha1(String decript)
    {
        try
        {
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte[] messageDigest = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数


            for (int i = 0; i < messageDigest.length; i++)
            {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2)
                {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();

        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 
     * @param decript 字符串

     * @return 结果
     */
    public static String sha(String decript)
    {
        try
        {
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA");
            digest.update(decript.getBytes());
            byte[] messageDigest = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数


            for (int i = 0; i < messageDigest.length; i++)
            {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2)
                {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();

        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * md5加密
     * @param input 字符串

     * @return 结果
     */
    public static String md5(String input)
    {
        try
        {
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要


            mdInst.update(input.getBytes());
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数


            for (int i = 0; i < md.length; i++)
            {
                String shaHex = Integer.toHexString(md[i] & 0xFF);
                if (shaHex.length() < 2)
                {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 加密
     *
     * @param content
     *            需要加密的内容
     * @param password
     *            加密密码
     * @return  结果
     */
    public static byte[] encryptAES(String content, String password)
    {
        try
        {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(password.getBytes()));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES"); // 创建密码器


            byte[] byteContent = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key); // 初始化


            byte[] result = cipher.doFinal(byteContent);
            return result; // 加密
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (NoSuchPaddingException e)
        {
            e.printStackTrace();
        }
        catch (InvalidKeyException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        catch (IllegalBlockSizeException e)
        {
            e.printStackTrace();
        }
        catch (BadPaddingException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 解密
     *
     * @param content
     *            待解密内容

    
     * @param password
     *            解密密钥
     * @return  结果
     */
    public static byte[] decryptAES(byte[] content, String password)
    {
        try
        {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(password.getBytes()));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES"); // 创建密码器


            cipher.init(Cipher.DECRYPT_MODE, key); // 初始化


            byte[] result = cipher.doFinal(content);
            return result; // 加密
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (NoSuchPaddingException e)
        {
            e.printStackTrace();
        }
        catch (InvalidKeyException e)
        {
            e.printStackTrace();
        }
        catch (IllegalBlockSizeException e)
        {
            e.printStackTrace();
        }
        catch (BadPaddingException e)
        {
            e.printStackTrace();
        }
        return null;
    }

}

使用: 

String sign = DecriptUtil.md5(signTemp).toUpperCase();

 

### 使用Python中的`hashlib`模块实现MD5加密 在Python中,可以利用内置的`hashlib`库轻松完成MD5加密操作。以下是具体的方法: #### 导入必要的模块 为了使用MD5加密功能,首先需要导入`hashlib`模块[^1]。 ```python import hashlib ``` #### 创建MD5对象并更新数据 通过调用`hashlib.md5()`创建一个MD5哈希对象,并使用`.update(data)`方法传入待加密的数据。注意,`data`必须是字节类型(bytes),因此如果输入的是字符串,则需先将其编码为字节串。 ```python data = "example_password".encode('utf-8') # 将字符串转换为字节类型 md5_hash = hashlib.md5() md5_hash.update(data) ``` #### 获取加密结果 可以通过`.hexdigest()`方法获取最终的十六进制表示形式的MD5值。 ```python encrypted_result = md5_hash.hexdigest() print(encrypted_result) # 输出:2346bc9edbf3f7dbe0dc9d3f8c0ddc7a ``` 完整的代码如下所示: ```python import hashlib def encrypt_md5(input_string): data = input_string.encode('utf-8') md5_hash = hashlib.md5() md5_hash.update(data) encrypted_result = md5_hash.hexdigest() return encrypted_result # 测试函数 password = "example_password" result = encrypt_md5(password) print(f"The MD5 hash of '{password}' is {result}") ``` 上述代码定义了一个名为`encrypt_md5`的函数,用于接收任意字符串作为参数,并返回该字符串对应的MD5散列值。 --- 关于加盐处理,可以在原始密码基础上附加一段随机字符后再进行MD5加密,从而增加安全性[^2]^。例如: ```python import hashlib import os def salt_encrypt_md5(input_string, salt=os.urandom(16).hex()): combined_data = (input_string + salt).encode('utf-8') md5_hash = hashlib.md5() md5_hash.update(combined_data) encrypted_result = md5_hash.hexdigest() return encrypted_result, salt # 测试带盐加密 password = "example_password" hashed_value, used_salt = salt_encrypt_md5(password) print(f"Salted Hash: {hashed_value}, Salt Used: {used_salt}") ``` 此脚本不仅完成了基本的MD5加密,还引入了动态生成的盐值以增强保护力度。 --- ### 注意事项 尽管MD5是一种广泛应用的摘要算法,但由于其存在碰撞风险,现已不推荐单独依赖它来进行敏感信息安全保障工作[^4]。对于现代应用而言,建议采用更安全的替代方案如SHA-256或其他强健型哈希技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值