加密算法分类
加密算法按是否可逆分为单向加密和双向加密。
单向加密
单向加密是不可逆的,也就是说只能进行加密,不能进行解密。通常用来传输或者存储敏感数据,如用户名、密码等。单向加密原则上不可破解,网络上所谓的破解实际上都属于碰撞,就是把常见的明文进行加密成密文后将明文和密文存储起来,然后逆向查询得到明文。常见的单向加密算法有MD5和SHA等。
双向加密
双向加密又称为可逆加密,分为对称加密和非对称加密。
对称加密
对称加密指加密和解密采用相同的密钥进行加解密的算法。对称加密的优点在于加解密的速度快和破解难度和密钥长度正相关。常见的对称加密算法:DES、3DES、IDEA、RC4、RC5、RC6、AES等。
非对称加密
非对称加密指加密和解密使用不同的密钥进行加解密的算法,因此也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。非对称加密可以用来进行加解密,也可以用来进行加签和验签。常见的非对称加密算法:RSA、 DSA、 ECC等。
另外提一点:加密和解密都是配对密钥进行的,可以公钥加密私钥解密,也可以私钥加密公钥解密。但是为了安全,通常都是以对方的公钥加密,自持私钥解密。
对称加密和非对称比较
对称加密密钥管理比较难,不适合互联网,一般用于内部系统,安全性一般,加密速度快。
非对称加密密钥管理简单,安全性高,加密速度慢,适合小数据量的数据加密和数据签名。
以下为RSA加密算法工具类,仅供参考:
package com.huatech.common.util; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.SignatureException; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; /** * 工具类 */ public class RSAUtil { /** * 读取秘钥数据 * @param keyFilePath * @return */ public static byte[] readKeyDatas(String keyFilePath){ BufferedReader bufferedReader=null; try{ bufferedReader = new BufferedReader(new FileReader(keyFilePath)); String str=null; StringBuilder stringBuilder=new StringBuilder(); while ((str=bufferedReader.readLine())!=null){ if(str.contains("---")){ continue; } stringBuilder.append(str); } return stringBuilder.toString().getBytes(); }catch (IOException e) { e.printStackTrace(); }finally { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 读取公钥 * @param publicKeyPath * @return */ public static PublicKey getPublicKey(String publicKeyPath){ //1.读取公钥文件,获取公钥数据 byte[] bytesPublicBase64 = readKeyDatas(publicKeyPath); //2.对读取回来的数据进行Base64解码 byte[] bytesPublic = Base64.getDecoder().decode(bytesPublicBase64); //3.把解码后的数据,重新封装成一个PublicKey对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytesPublic); KeyFactory keyFactory=null; try { keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec); return publicKey; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } return null; } /** * 读取私钥 * @param privateKeyPath * @return */ public static PrivateKey getPrivateKey(String privateKeyPath){ //1.读取私钥文件,获取私钥数据 byte[] bytesPrivateBase64 = readKeyDatas(privateKeyPath); //2.对读取回来的数据进行Base64解码 byte[] bytesPrivate = Base64.getDecoder().decode(bytesPrivateBase64); //3.把解码后的数据,重新封装成一个PrivateKey对象 PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytesPrivate); KeyFactory keyFactory=null; try { keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec); return privateKey; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } return null; } /** * 加密数据 * @param publicKey * @param originData * @return */ public static String encodeData(PublicKey publicKey,String originData){ try { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,publicKey); byte[] bytesEncrypt = cipher.doFinal(originData.getBytes()); //Base64编码 byte[] bytesEncryptBase64 = Base64.getEncoder().encode(bytesEncrypt); return new String(bytesEncryptBase64); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } /** * 解密数据 * @param privateKey * @param encodeData * @return */ public static String decodeData(PrivateKey privateKey,String encodeData){ try { //Base64解码 byte[] bytesEncrypt = Base64.getDecoder().decode(encodeData); //加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] bytesDecrypt = cipher.doFinal(bytesEncrypt); return new String(bytesDecrypt); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } /** * 签名 * @param privateKey * @param data * @return */ public static byte[] signData(PrivateKey privateKey, String data){ byte[] signed = null; Signature signature; try { signature = Signature.getInstance("Sha1WithRSA"); signature.initSign(privateKey); signature.update(data.getBytes("UTF-8")); signed = signature.sign(); } catch (NoSuchAlgorithmException e) { } catch (InvalidKeyException e) { } catch (SignatureException | UnsupportedEncodingException e) { } return signed; } /** * 验签 * @param publicKey * @param data * @param signed * @return */ public static boolean verifySign(PublicKey publicKey, String data, byte[] signed){ boolean verify = false; Signature signature2; try { signature2 = Signature.getInstance("Sha1WithRSA"); signature2.initVerify(publicKey); signature2.update(data.getBytes("UTF-8")); verify = signature2.verify(signed); } catch (NoSuchAlgorithmException e) { } catch (InvalidKeyException e) { } catch (SignatureException | UnsupportedEncodingException e) { } return verify; } }
相关推荐
首先,我们来看看几种常见的加密算法: 1. **DES(Data Encryption Standard)数据加密标准**:DES是一种对称加密算法,基于64位的数据块和56位的密钥进行操作。尽管DES现在被认为安全性较低,但由于其简单快速,仍...
C# 常用加密算法 包括MD5 base64 hax等
2. **加密算法**:加密库包支持的常见加密算法可能包括: - **AES(Advanced Encryption Standard)**:一种对称加密算法,用于保护大量数据的安全,速度快,效率高。 - **RSA**:非对称加密算法,用于公钥基础...
在这个“常用加密算法演示”中,我们主要探讨了三种常见的加密算法:SHA256加盐加密、AES ECB加密以及AES CBC加密。下面将详细介绍这些加密算法及其特点。 首先,SHA256是一种广泛使用的哈希函数,用于生成固定长度...
本文将详细介绍标题中提到的几种常见加密算法,以及如何在VC++6.0环境下使用DLL库进行操作。 首先,我们来看看标题中涉及的五种加密算法: 1. **AES(Advanced Encryption Standard)**:高级加密标准,是目前最...
- **AES(Advanced Encryption Standard)**:高级加密标准,是目前最常用的对称加密算法之一,具有较高的安全性和较快的加密速度。 ### 非对称加密算法 非对称加密算法,又称公钥加密算法,其特点是加密和解密...
- **AES**:AES是目前最常用的对称加密算法,支持多种密钥长度(128、192、256位),安全性和效率都相对较高。 2. **非对称加密算法** 非对称加密算法使用一对公钥和私钥,公钥用于加密,私钥用于解密。这确保了...
### 常见加密算法概述 #### 一、引言 加密技术是信息安全领域中的核心组成部分,用于保护数据在传输过程中的安全性和完整性。本文将详细介绍几种常见的加密算法,包括对称加密算法(如DES、3DES、Blowfish等)和非...
常见的加密算法主要分为对称加密和非对称加密两种类型。这里我们将深入探讨这两种加密方式及其代表性的算法。 首先,对称加密算法是最早使用的加密技术,其中加密和解密使用的是同一把密钥。这种算法的优点在于其...
基于C++实现对常用加密算法改进及对抗思路源码+项目说明(含哈希、对称、校验码、编码格式等加密).zip基于C++实现对常用加密算法改进及对抗思路源码+项目说明(含哈希、对称、校验码、编码格式等加密).zip基于C++...
根据提供的文件信息,本文将详细解析C#中几种常用的加密算法,包括MD5、RC2以及RSA,并重点介绍这些加密算法的基本概念、应用场景及其在C#中的具体实现方式。 ### 一、MD5加密算法 #### 1.1 概述 MD5(Message-...
本Demo,"swift-一个关于常用加密算法的Demo",聚焦于多种常见的加密技术,旨在帮助开发者理解和应用这些算法以增强应用的安全性。下面我们将深入探讨MD5和RSA这两种在Demo中出现的加密算法。 MD5(Message-Digest ...
加密算法计算器,支持DES 3DES CBC MAC SM2 SM3 SM4 MD5 SHA等 CPU卡,加密算法,java卡类行开发者助手!
现代密码学已经发展出更为强大的加密算法,如基于数学难题的非对称加密,以及使用哈希函数和数字签名提供数据完整性和不可抵赖性。这些技术广泛应用于互联网通信、金融交易、个人隐私保护等多个领域,确保了信息的...
加密算法在信息技术领域扮演着至关重要的角色,它们用于保护数据的隐私、确保网络通信的安全以及验证数据的完整性和来源。以下是对标题和描述中提到的几种加密算法的详细解释: 1. MD5(Message-Digest Algorithm 5...
简单介绍了常用的几种加密算法 DES;mars;md5;rsa
本文件中提到的常见加密算法和摘要算法是两个重要的概念,它们在实际开发中有着广泛的应用。 一、加密算法 加密算法是一种将明文数据转换成看似随机的密文的数学方法。常见的加密算法有: 1. 对称加密算法:如DES...