【Java】使用SHA-256 SHA-512进行加密(代码实现)

        之前我们使用MD5进行加密,虽然MD5是不可逆的,但是并不安全,不能够避免碰撞冲击,所以相对而言其实也是不太安全的, 使用SHA-256 SHA-512可以解决MD5碰撞冲击的问题,但是不是绝对的,但目前还没有人公开成功实现过对它们的碰撞攻击。
        MD5、SHA-256和SHA-512都是常见的安全哈希算法,用于生成固定长度的哈希值,以保证数据的完整性和安全性。MD5是最早提出的一种哈希算法,它生成的哈希值长度为128位。由于MD5的算法相对简单,计算速度较快,因此在早期被广泛应用于各种安全场景中。但是,随着计算机硬件的发展和攻击技术的提高,
        MD5已经被证实存在严重的安全漏洞,例如碰撞攻击、预像攻击等。因此,在现代安全应用中已经不再建议使用MD5算法。

        SHA-256和SHA-512是更新的哈希算法,它们分别生成的哈希值长度为256位和512位。相比于MD5,SHA-256和SHA-512的算法更加复杂,计算速度较慢,但是安全性更高。对于SHA-256和SHA-512来说,找到碰撞所需要的计算量非常巨大,目前还没有人公开成功实现过对它们的碰撞攻击。目前,SHA-256和SHA-512已经被广泛应用于各种安全场景中,例如数字签名、SSL/TLS安全通信、密码存储等。
        如果想要实现MD5进行加密解密的话可以参考(MD5可以适用于安全性要求相对不高的场景):【Java】使用MD5进行加密解密(代码实现)_md5解密-CSDN博客

        如果想要使用RSA进行加密解密可以参考:【Java】使用RSA进行加密解密(代码实现)_java pkcs#8 rsa公钥解密-CSDN博客

下述就来提供SHA-256和SHA-512的加密工具类:

SHA-256和SHA-512的主要区别在于哈希值的长度和算法的复杂度。具体来说:

  1. 哈希值的长度:SHA-256生成的哈希值长度为256位,而SHA-512生成的哈希值长度为512位。这意味着SHA-512生成的哈希值更长,因此更难被破解。
  2. 算法的复杂度:SHA-512的算法比SHA-256更复杂,因此它的计算量更大,速度更慢。但是,SHA-512的安全性更高,更适合用于对安全性要求较高的应用场景。

SHA256Util 

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * SHA-256  Secure Hash Algorithm,-安全散列算法
 * */
public class SHA256Util {

    public static void main(String[] args) {
        String input = "Hello, World!";
        String sha256Hex = sha256(input);
        System.out.println(input+"SHA-256: " + sha256Hex);
    }


    public static String sha256(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
            StringBuilder hex = new StringBuilder();
            for (byte b : hash) {
                hex.append(String.format("%02x", b));
            }
            return hex.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

SHA512Util

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * SHA-512  Secure Hash Algorithm,-安全散列算法
 * */
public class SHA512Util {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String input = "Hello, World!";
        String sha512Hex = sha512(input);
        System.out.println("SHA-512 hash: " + sha512Hex.toString());
    }


    public static String sha512(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
            StringBuilder hex = new StringBuilder();
            for (byte b : hash) {
                hex.append(String.format("%02x", b));
            }
            return hex.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

         综上所述,在现代安全应用中,建议优先考虑使用SHA-256或SHA-512等更新的哈希算法,而不是MD5算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mxin5

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

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

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

打赏作者

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

抵扣说明:

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

余额充值