Java常用的加密算法,你知道几种?

在Java开发中,加密技术主要涉及到对称加密、非对称加密、散列函数(哈希)。下面和我一起了解这些加密方法,包括它们的优缺点、使用场景,并提供一些常用的Java加密工具类示例。

1、对称加密

对称加密使用同一密钥进行加密和解密。这意味着发送者和接收者必须共享同一个密钥。

常见对称算法

DES (Data Encryption Standard):较旧的标准,不再推荐用于新应用。

3DES (Triple DES):改进版的DES,提高了安全性。

AES (Advanced Encryption Standard):现代标准,广泛使用,安全性高。

优缺点

优点:速度快,适用于大量数据的加密。

缺点:  密钥管理复杂,因为密钥必须安全地分发。

使用场景

用于数据传输加密,如文件加密、数据库字段加密等。

示例

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
​
public class SymmetricEncryptionUtil {
    private static final String ALGORITHM = "AES";
    private static final byte[] keyBytes = new byte[]{/* 你的密钥字节 */};
​
    public static String encrypt(String data) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
​
    public static String decrypt(String encrypted) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        byte[] decodedValue = Base64.getDecoder().decode(encrypted);
        byte[] decrypted = cipher.doFinal(decodedValue);
        return new String(decrypted);
    }
}

2、非对称加密

非对称加密使用一对密钥:公钥和私钥。公钥用于加密,私钥用于解密。这解决了对称加密中密钥分发的问题,但速度相对较慢。

常见非对称算法

RSA:最知名的非对称加密算法。

DSA (Digital Signature Algorithm):主要用于数字签名。

优缺点

优点:密钥分发安全,适合远程密钥交换。

缺点:加密解密速度慢,不适合大数据量加密。

使用场景

用于公钥基础设施(PKI),如SSL/TLS协议中的证书签名和验证。

示例

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;
​
public class AsymmetricEncryptionUtil {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048);
        KeyPair keyPair = keyGen.generateKeyPair();
​
        // 加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
        byte[] encrypted = cipher.doFinal("Hello, World!".getBytes());
​
        // 解密
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
        byte[] decrypted = cipher.doFinal(encrypted);
        System.out.println(new String(decrypted));
    }
}

3、散列函数

散列函数将任意长度的数据转换为固定长度的摘要,通常用于验证数据完整性或创建密码的哈希值。

常见散列算法

MD5:由于已知的安全漏洞,不再推荐。

SHA-1:曾广泛使用,但现在认为不够安全。

SHA-256, SHA-384, SHA-512:现代安全散列算法。

优缺点

优点:用于验证数据完整性和用户密码存储,不可逆。

缺点:无法恢复原始数据。

使用场景

用户密码存储,文件校验,数字签名等。

示例

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
import java.math.BigInteger;
​
public class HashUtil {
    public static String sha256(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
            BigInteger number = new BigInteger(1, hash);
            StringBuilder hexString = new StringBuilder(number.toString(16));
            while (hexString.length() < 64) {
                hexString.insert(0, '0');
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

StruggleRookie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值