当前位置:   article > 正文

对称加密、非对称加密以及哈希算法详解_对称加密与sha-256算法

对称加密与sha-256算法

目录

1、常见数据加密算法有哪些?

(1)对称加密算法

(2)非对称加密算法

(3)哈希算法

2、通过Java代码使用加密算法的相关示例

(1)对称加密算法

(2)非对称加密算法

(3)哈希算法


1、常见数据加密算法有哪些?

(1)对称加密算法

        对称加密算法是指加密和解密使用相同密钥的加密算法,通信双方在通信前需要先协商出一个密钥,然后使用这个密钥进行加密和解密操作。由于加密和解密使用相同密钥,因此对称加密算法的加解密速度比较快,适用于大量数据的加密和解密操作。常见的对称加密算法有:

  1. DES:使用56位的密钥进行加密和解密操作,由于密钥长度过短,安全性较差,因此现在很少使用。

  2. 3DES:使用168位的密钥进行加密和解密操作,由于采用三次DES算法进行加密,因此安全性比较高。

  3. AES:使用128、192或256位的密钥进行加密和解密操作,被广泛应用于各种领域,如网络安全、电子商务、金融等。//使用广泛

  4. RC4:是一种流密码,使用变长的密钥进行加密和解密操作,速度快,但由于其加密弱点被发现,现已很少使用。

  5. Blowfish:使用变长的密钥进行加密和解密操作,速度快,安全性较高,被广泛应用于各种领域。

(2)非对称加密算法

        非对称加密算法是指加密和解密使用不同密钥的加密算法,通信双方需要各自生成一对密钥:公钥和私钥,公钥可以公开,任何人都可以使用公钥对数据进行加密,但只有持有私钥的人才能够解密加密后的数据。非对称加密算法安全性高,但加解密速度较慢,因此通常用于少量数据的加密和数字签名等场景。常见的非对称加密算法有:

  1. RSA:使用公钥和私钥进行加密和解密操作,广泛应用于数字签名、电子邮件、VPN等场景。

  2. DSA:是一种基于离散对数问题的非对称加密算法,用于数字签名等场景。

  3. Diffie-Hellman:是一种密钥交换协议,用于安全地交换密钥。

  4. ECC:是一种基于椭圆曲线的非对称加密算法,相比RSA等算法,ECC使用更短的密钥长度就能提供相同的安全强度,因此越来越受到关注和应用。

(3)哈希算法

        哈希算法是一种不可逆的加密算法,它将任意长度的数据映射成固定长度的哈希值,常用于验证数据完整性、数字签名等场景。常见的哈希算法有:

  • MD5:消息摘要算法,生成128位哈希值,安全性较弱,现在一般不推荐使用。
  • SHA-1:安全哈希算法,生成160位哈希值,安全性相对较高,但由于哈希值长度较短,目前已经不太安全,不推荐使用。
  • SHA-2:安全哈希算法家族,包括SHA-224、SHA-256、SHA-384和SHA-512等,安全性高,被广泛应用于各种领域。
  • SHA-3:是一种新的哈希算法,安全性与SHA-2相当,但速度更快,已经成为新的标准算法之一。
  • BLAKE2:是一种高速的哈希算法,速度比SHA-3还要快,安全性也很高,被广泛应用于各种领域。

        在实际应用中,选择加密算法需要根据具体场景和安全需求来决定。如果需要对大量数据进行加密和解密,可以选择对称加密算法;如果需要安全地交换密钥或进行数字签名等操作,可以选择非对称加密算法;如果需要验证数据完整性或进行身份验证等操作,可以选择哈希算法。

// 根据场景选择适当的加密算法

2、通过Java代码使用加密算法的相关示例

(1)对称加密算法

        Java 中提供了 javax.crypto 包来支持对称加密算法的使用,可以通过 Cipher 类来进行加密和解密操作。使用 AES 算法进行对称加密和解密的示例代码如下:

  1. import javax.crypto.Cipher;
  2. import javax.crypto.spec.SecretKeySpec;
  3. import java.util.Base64;
  4. public class AESEncryptionExample {
  5. private static final String SECRET_KEY = "mysecretkey12345";
  6. private static final String ALGORITHM = "AES";
  7. public static String encrypt(String plainText) throws Exception {
  8. SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
  9. Cipher cipher = Cipher.getInstance(ALGORITHM);
  10. cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
  11. byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
  12. return Base64.getEncoder().encodeToString(encryptedBytes);
  13. }
  14. public static String decrypt(String encryptedText) throws Exception {
  15. SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
  16. Cipher cipher = Cipher.getInstance(ALGORITHM);
  17. cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
  18. byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);
  19. byte[] decryptedBytes = cipher.doFinal(decodedBytes);
  20. return new String(decryptedBytes);
  21. }
  22. public static void main(String[] args) throws Exception {
  23. String plainText = "Hello, world!";
  24. String encryptedText = encrypt(plainText);
  25. String decryptedText = decrypt(encryptedText);
  26. System.out.println("Plain text: " + plainText);
  27. System.out.println("Encrypted text: " + encryptedText);
  28. System.out.println("Decrypted text: " + decryptedText);
  29. }
  30. }

(2)非对称加密算法

        Java 中提供了 java.security 包来支持非对称加密算法的使用,可以通过 KeyPairGenerator 和 KeyAgreement 等类来生成密钥对和进行密钥交换。使用 RSA 算法进行非对称加密和解密的示例代码如下:

  1. import javax.crypto.Cipher;
  2. import java.security.KeyPair;
  3. import java.security.KeyPairGenerator;
  4. import java.security.PrivateKey;
  5. import java.security.PublicKey;
  6. import java.util.Base64;
  7. public class RSAEncryptionExample {
  8. private static final String ALGORITHM = "RSA";
  9. public static String encrypt(String plainText, PublicKey publicKey) throws Exception {
  10. Cipher cipher = Cipher.getInstance(ALGORITHM);
  11. cipher.init(Cipher.ENCRYPT_MODE, publicKey);
  12. byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
  13. return Base64.getEncoder().encodeToString(encryptedBytes);
  14. }
  15. public static String decrypt(String encryptedText, PrivateKey privateKey) throws Exception {
  16. Cipher cipher = Cipher.getInstance(ALGORITHM);
  17. cipher.init(Cipher.DECRYPT_MODE, privateKey);
  18. byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);
  19. byte[] decryptedBytes = cipher.doFinal(decodedBytes);
  20. return new String(decryptedBytes);
  21. }
  22. public static void main(String[] args) throws Exception {
  23. String plainText = "Hello, world!";
  24. KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
  25. keyPairGenerator.initialize(2048);
  26. KeyPair keyPair = keyPairGenerator.generateKeyPair();
  27. PublicKey publicKey = keyPair.getPublic();
  28. PrivateKey privateKey = keyPair.getPrivate();
  29. String encryptedText = encrypt(plainText, publicKey);
  30. String decryptedText = decrypt(encryptedText, privateKey);
  31. System.out.println("Plain text: " + plainText);
  32. System.out.println("Encrypted text: " + encryptedText);
  33. System.out.println("Decrypted text: " + decryptedText);
  34. }
  35. }

(3)哈希算法

        Java 中提供了 java.security 包来支持哈希算法的使用,可以通过 MessageDigest 类来生成哈希值。使用 SHA-256 算法进行哈希计算的示例代码如下:// Hash算法没有解密过程

  1. import java.nio.charset.StandardCharsets;
  2. import java.security.MessageDigest;
  3. import java.security.NoSuchAlgorithmException;
  4. public class SHA256HashExample {
  5. public static String calculateHash(String input) throws NoSuchAlgorithmException {
  6. MessageDigest md = MessageDigest.getInstance("SHA-256");
  7. byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
  8. StringBuilder hexString = new StringBuilder();
  9. for (byte b : hash) {
  10. String hex = Integer.toHexString(0xff & b);
  11. if (hex.length() == 1) {
  12. hexString.append('0');
  13. }
  14. hexString.append(hex);
  15. }
  16. return hexString.toString();
  17. }
  18. public static void main(String[] args) throws NoSuchAlgorithmException {
  19. String input = "Hello, world!";
  20. String hash = calculateHash(input);
  21. System.out.println("Input: " + input);
  22. System.out.println("Hash: " + hash);
  23. }
  24. }

        以上是 Java 中常见的加密算法的使用示例代码。需要注意的是,在实际使用中,加密算法的实现可能会涉及到更多的细节和安全性考虑,因此建议使用经过专业审核和测试的安全库和算法,避免自己实现可能存在的安全漏洞和错误。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/898286
推荐阅读
相关标签
  

闽ICP备14008679号