SHA加解密工具类

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHAUtil {
    public SHAUtil() {
    }

    public static String getSign(String content, String encName) {
        try {
            MessageDigest md = null;
            String strDes = null;
            byte[] bt = content.getBytes("UTF-8");

            try {
                if (encName == null || encName.equals("")) {
                    encName = "SHA-1";
                }

                md = MessageDigest.getInstance(encName);
                md.update(bt);
                strDes = bytes2Hex(md.digest());
            } catch (NoSuchAlgorithmException var6) {
                return null;
            }

            return strDes;
        } catch (UnsupportedEncodingException var7) {
            System.out.println(var7.toString());
            var7.printStackTrace();
            return "";
        }
    }

    private static String bytes2Hex(byte[] bts) {
        String des = "";
        StringBuffer desBuff = new StringBuffer();
        String tmp = null;

        for(int i = 0; i < bts.length; ++i) {
            tmp = Integer.toHexString(bts[i] & 255);
            if (tmp.length() == 1) {
                desBuff.append("0");
            }

            desBuff.append(tmp);
        }

        des = des + desBuff.toString();
        return des;
    }

    public static String shaEncode(String inStr) throws Exception {
        MessageDigest sha = null;

        try {
            sha = MessageDigest.getInstance("SHA");
        } catch (Exception var7) {
            System.out.println(var7.toString());
            var7.printStackTrace();
            return "";
        }

        byte[] byteArray = inStr.getBytes("UTF-8");
        byte[] md5Bytes = sha.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();

        for(int i = 0; i < md5Bytes.length; ++i) {
            int val = md5Bytes[i] & 255;
            if (val < 16) {
                hexValue.append("0");
            }

            hexValue.append(Integer.toHexString(val));
        }

        return hexValue.toString();
    }
}

 

PHP中的SHA加密通常指的是使用SHA(安全散列算法)系列函数进行数据的哈希处理。哈希是一种将任意长度的输入(也称为预映像)通过散列算法变换成固定长度输出的编码方式,特点是不可逆,且不同的输入几乎不可能产生相同的输出。SHA系列包括SHA-1、SHA-256、SHA-512等多种算法,它们生成的哈希长度各不相同。 在PHP中,可以使用内置的sha系列函数来进行加解密操作,但需要注意的是,这些操作实际上是哈希计算,不是加密解密。下面是使用SHA系列函数进行哈希处理的例子: ```php // 使用SHA-256算法生成哈希 $originalString = "这是一个字符串"; $hash = hash("sha256", $originalString); echo "原始字符串: " . $originalString . "\n"; echo "SHA-256哈希值: " . $hash . "\n"; ``` 如果需要对哈希值进行验证,可以使用`hash_equals()`函数比较两个字符串是否相同,这在验证用户密码时非常有用,因为它可以防止时间攻击(即通过比较时间差异来推测字符串内容)。 ```php // 假设用户输入的密码 $userInput = "这是一个字符串"; // 从数据库获取原始哈希值 $storedHash = $hash; // 验证用户输入的密码是否与存储的哈希值匹配 if (hash_equals($storedHash, $userInput)) { echo "密码正确!"; } else { echo "密码错误!"; } ``` 需要注意的是,虽然哈希函数是单向的且不可逆,但存在彩虹表等攻击手段可以对简单的哈希进行破解。因此,在安全要求较高的场合,通常建议使用加盐(即在原始数据中加入随机数)的方式来提高安全性,并且在处理密码等敏感信息时,应当使用专门的密码哈希函数如`password_hash()`和`password_verify()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值