Java加密之SHA加盐

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;

public class SHA {
	public static final String KEY_SHA = "SHA";   
	public static final String ra="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

	/**
	 * 字符串sha加密
	 * @param s 要加密的字符串
	 * @return 加密后的字符串
	 */
	public static String sha(String s)
	{
	    BigInteger sha =null;
	    byte[] bys = s.getBytes();   
	    try {
	         MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);  
	         messageDigest.update(bys);
	         sha = new BigInteger(messageDigest.digest());
	    } catch (Exception e) {
	    	e.printStackTrace();
	    }
	    return sha.toString(32);
	}
	
	/**
	 * 字符串+随机盐 sha加密
	 * @param s 要加密的字符串
	 * @return 盐和加密后的字符串
	 */	
	public static Map<String,String> getResult(String s){
		Map<String,String> map=new HashMap<String,String>();
		String salt=getSalt();
		map.put("salt", salt);//盐
		map.put("password", sha(s+salt));//加密后的密码
 	    return map;
	}
	
	/**
	 * 生成随机盐
	 * @return 随机生成的盐
	 */
	private static String getSalt() {
		SecureRandom random=new SecureRandom();
		int length=random.nextInt(5)+8;//盐的长度,这里是8-12可自行调整
        char[] text = new char[length];
        for (int i = 0; i < length; i++) {
            text[i] = ra.charAt(random.nextInt(ra.length()));
        }
        return new String(text);
    }
	
	/**
	 * 测试方法
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(getResult("12345678"));
	}

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java中使用MD5算法进行加盐加密的示例代码: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; public class MD5SaltEncryption { public static void main(String[] args) { String password = "password123"; String salt = getSalt(); String hashedPassword = getMD5Hash(password, salt); System.out.println("Salt: " + salt); System.out.println("Hashed Password: " + hashedPassword); } public static String getSalt() { SecureRandom random = new SecureRandom(); byte[] salt = new byte[16]; random.nextBytes(salt); return bytesToHex(salt); } public static String getMD5Hash(String password, String salt) { String saltedPassword = salt + password; try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] hashedPassword = md.digest(saltedPassword.getBytes()); return bytesToHex(hashedPassword); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b)); } return sb.toString(); } } ``` 在上述代码中,`getSalt()`方法生成一个16字节(128位)的随机盐,并将其转换为十六进制字符串进行返回。`getMD5Hash()`方法接受两个字符串参数:密码和盐。它将盐和密码拼接在一起,然后使用MD5算法对拼接后的字符串进行哈希处理。最后,它将哈希后的结果转换为十六进制字符串进行返回。 需要注意的是,MD5算法已经被证明不是安全的哈希算法,因此建议使用更安全的哈希算法,如SHA-256或SHA-512。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值