SHA1加密算法


SHA-1是一種數據加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段密文。

SHA-1 與 MD5 的比較

 對密碼分析的安全性:由於MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。

速度:在相同的硬件上,SHA-1 的運行速度比 MD5 慢。

 

SignUtil.sha1(password)  對密碼進行sha1加密

public class SignUtil {
    private static final Logger LOG = LoggerFactory.getLogger(SignUtil.class);
    private static final String DEFAULT_CHARSET = "UTF-8";
    private static final char[] DIGITS;

    public static String hmacSha256(String key, String data) {
        try {
            Mac mac = Mac.getInstance("HmacSHA256");
            SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
            mac.init(signingKey);
            return encodeHex(mac.doFinal(data.getBytes()));
        } catch (Exception e) {
            LOG.error("execute hmacSHA256 error",e);
        }

        return null;
    }

    public static String md5(String data, String charset) {
        try {
            byte[] msg = data.getBytes(charset);
            MessageDigest md = MessageDigest.getInstance("MD5");
            return encodeHex(md.digest(msg));
        } catch (Exception e) {
            LOG.error("execute MD5 error",e);
        } 
        return null;
    }

    public static String sha256(String data, String charset) {
        try {
            byte[] msg = data.getBytes(charset);
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            return encodeHex(md.digest(msg));
        } catch (Exception e) {
            LOG.error("execute SHA-256 error",e);
        } 
        return null;
    }

    public static String sha1(String data, String charset) {
        try {
            byte[] msg = data.getBytes(charset);
            MessageDigest md = MessageDigest.getInstance("SHA1");
            return encodeHex(md.digest(msg));
        } catch (Exception e) {
            LOG.error("execute SHA1 error",e);
        } 
        return null;
    }

    public static String sha1(String data) {
        return sha1(data, DEFAULT_CHARSET);
    }

    private static String encodeHex(byte[] data) {
        int l = data.length;
        char[] out = new char[l << 1];
        int i = 0;

        for (int j = 0; i < l; ++i) {
            out[j++] = DIGITS[(240 & data[i]) >>> 4];
            out[j++] = DIGITS[15 & data[i]];
        }

        return new String(out);
    }

    static {
        DIGITS =
                new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
                        'e', 'f'};
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM