整合了大部分常用的加密/解密工具的框架【encryption-tool】

2024-02-18 17:52

本文主要是介绍整合了大部分常用的加密/解密工具的框架【encryption-tool】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

encryption-tool

整合了大部分常用的加密/解密工具的框架,方便根据特定使用场景方便的使用合适的加密/解密算法,
并对大部分异常进行了解释说明,方便使用者快速定位问题。

常用的加密/解密算法介绍及其常用的应用场景

BCrypt

BCrypt是一种密码哈希函数和密码学算法,用于对密码进行安全存储和验证。它使用Salt(盐)和适应性哈希函数的组合,以提供更高的安全性。BCrypt的主要特点和工作原理如下:1. 盐(Salt):盐是一个随机生成的字符串,它与密码一起输入哈希函数,增加了密码的复杂性和安全性。每个密码都使用不同的盐进行加密,即使密码相同,生成的哈希值也会不同。2. 适应性哈希函数:BCrypt使用适应性哈希函数,它会根据工作因子(work factor)进行多次迭代,以增加计算成本。工作因子决定了哈希函数的计算时间和资源消耗,可以通过增加工作因子的大小来提高哈希函数的安全性。3. 哈希函数输出:BCrypt生成的哈希值包括了盐和密码的组合,并且具有固定的长度。哈希值可以用于存储在数据库中,以便后续验证密码时进行比较。常见的使用场景包括:1. 用户密码存储:BCrypt广泛用于存储用户密码。当用户注册或更改密码时,将其密码使用BCrypt进行哈希处理,并将哈希值存储在数据库中。在验证用户登录时,将用户输入的密码与存储的哈希值进行比较,以验证密码的正确性。2. 认证和授权系统:BCrypt可用于构建认证和授权系统,以保护敏感资源和数据。用户的密码可以使用BCrypt进行哈希处理,并与存储的哈希值进行比较,从而实现用户身份验证。3. 安全敏感操作的密码验证:BCrypt适用于对一些安全敏感操作进行密码验证,例如访问管理后台、修改重要设置等。通过使用BCrypt验证密码,可以增加操作的安全性,防止未经授权的访问。总的来说,BCrypt是一种可靠且广泛使用的密码哈希函数和密码学算法,用于存储和验证密码。它提供了安全性和可扩展性,并在许多应用场景中用于保护用户密码和敏感数据。

AES

AES(Advanced Encryption Standard)是一种对称加密算法,被广泛应用于数据保护和安全通信领域。它是目前最常用的加密算法之一。AES的主要特点和工作原理如下:1. 对称加密:AES是一种对称加密算法,意味着相同的密钥用于加密和解密数据。发送方使用密钥对数据进行加密,接收方使用相同的密钥对数据进行解密。2. 块加密算法:AES以块为单位对数据进行加密,每个块的大小为128位(16字节)。数据长度不足一个块的倍数时,会使用填充方式进行处理。3. 密钥长度:AES支持128位、192位和256位的密钥长度,密钥长度越长,加密强度越高。4. 轮(Round)和子密钥生成:AES使用多轮加密过程,每轮包括字节替代、行移位、列混淆和轮密钥加。这些操作通过迭代应用于数据块,以增加加密的复杂性和安全性。常见的使用场景包括:1. 数据加密和保护:AES被广泛用于保护敏感数据的安全性,例如在存储或传输过程中对数据进行加密。它可以用于加密文件、数据库记录、通信协议等,以确保数据在传输和储存过程中不被未经授权的访问者所读取或篡改。2. 网络通信安全:AES被用于加密网络通信,例如在HTTPS中用于加密传输层安全性(TLS)协议。它可以保护敏感信息(如用户凭据、信用卡信息)在客户端和服务器之间的传输过程中的机密性和完整性。3. 文件和文件夹加密:AES可以用于加密整个文件或文件夹,以确保文件在存储或传输过程中的安全性。这种加密方式可以用于保护个人文件、敏感文档等。4. 数据库加密:AES可以用于对数据库中的数据进行加密,以提高数据库的安全性。通过对敏感数据进行加密,即使数据库被未经授权的访问者获取,也无法读取其中的明文数据。总的来说,AES是一种强大且广泛应用的对称加密算法,被用于保护数据的机密性和完整性。它可以在各种场景中使用,包括数据加密、网络通信安全、文件加密和数据库加密等。

RSA

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛用于数据加密、数字签名和密钥交换等领域。它是目前最常用的非对称加密算法之一。RSA的主要特点和工作原理如下:1. 非对称加密:RSA使用一对密钥,包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。由于公钥和私钥是不同的,所以称为非对称加密算法。2. 密钥生成:RSA的密钥由两个大素数生成。生成密钥时,需要选择两个大素数,并计算出与之相关的公钥和私钥。3. 加密和解密:使用公钥对数据进行加密,只有使用相应的私钥才能解密。加密后的数据只能通过私钥进行解密,以确保数据的机密性。4. 数字签名:RSA还可以用于生成和验证数字签名。私钥用于生成数字签名,公钥用于验证签名。数字签名可用于验证数据的完整性和身份认证。常见的使用场景包括:1. 数据加密和保护:RSA被广泛用于对敏感数据进行加密和保护。例如,可以使用RSA加密算法对用户的登录凭据、支付信息等进行加密,以确保数据在传输和储存过程中的安全性。2. 数字签名和身份认证:RSA可用于生成和验证数字签名,以保证数据的完整性和身份认证。数字签名可以用于验证数据的来源和确保数据在传输过程中未被篡改。3. 密钥交换:RSA也可以用于密钥交换,例如在安全通信中使用。发送方可以使用接收方的公钥加密会话密钥,然后将密文发送给接收方。接收方使用其私钥解密密文以获得会话密钥,从而实现安全的密钥交换。4. SSL/TLS通信:RSA在SSL/TLS协议中扮演重要的角色。它用于在客户端和服务器之间建立安全的通信连接,包括密钥交换、身份认证和通信数据的加密。总的来说,RSA是一种强大且广泛应用的非对称加密算法,用于数据加密、数字签名和密钥交换等领域。它提供了数据的机密性、完整性和身份认证,被广泛用于保护敏感信息和确保通信的安全性。

ECC

ECC(Elliptic Curve Cryptography)是一种基于椭圆曲线的非对称加密算法。它与RSA和DSA等传统加密算法相比,在相同的安全性水平下,具有更短的密钥长度和更高的计算效率,因此在资源受限的环境下更加适用。ECC的主要特点和工作原理如下:1. 椭圆曲线:ECC基于椭圆曲线上的离散数学问题,利用椭圆曲线的数学特性进行加密和解密操作。椭圆曲线方程形式为 y^2 = x^3 + ax + b,在有限域上进行计算。2. 密钥生成:ECC使用椭圆曲线上的点作为公钥,私钥是一个随机数。通过选择合适的椭圆曲线和生成私钥,可以计算出对应的公钥。3. 加密和解密:使用对方的公钥对数据进行加密,只有持有相应私钥的一方才能解密。加密和解密过程涉及椭圆曲线上的点运算和数论运算。4. 密钥长度:相比于传统加密算法,ECC可以使用更短的密钥长度达到相同的安全性水平。这对于资源受限的设备和网络通信中的性能优化非常有利。常见的使用场景包括:1. 移动设备和物联网(IoT):由于ECC可以使用较短的密钥长度,适用于资源受限的移动设备和物联网设备。它可以用于保护移动设备上的敏感数据和通信,以及在物联网中确保设备之间的安全通信。2. 数字证书和SSL/TLS通信:ECC广泛应用于数字证书和SSL/TLS通信领域。它可以用于生成和验证数字证书,以及在客户端和服务器之间建立安全的通信连接,提供身份认证、密钥交换和通信数据的加密。3. 加密协议和安全通信:ECC可用于构建安全通信协议,例如加密电子邮件、加密即时通信和虚拟专用网络(VPN)。它可以提供机密性、完整性和身份认证,确保通信的安全性。4. 区块链和加密货币:ECC在区块链技术和加密货币中扮演重要角色。它用于生成和验证数字签名,确保交易的有效性和安全性。总的来说,ECC是一种高效且安全的非对称加密算法,适用于资源受限的环境和性能敏感的应用。它广泛应用于移动设备、物联网、SSL/TLS通信、加密协议、区块链和加密货币等领域,提供数据的保护和安全通信的支持。

使用方法

1、引入依赖

   <dependency><groupId>com.may</groupId><artifactId>encryption-tool</artifactId><version>1.0.21</version>
</dependency>

2、执行命令

mvn install

3、具体用法

try {System.err.println("--------------------------------------------------------------");String str = encryptionService.encryptByBCrypt("wwww");System.out.println("BCrypt加密后:" + str);Boolean matchResult = encryptionService.matchByBCrypt("wwww", str);System.err.println("BCrypt校验结果 : " + matchResult);Thread.sleep(1000);System.err.println("--------------------------------------------------------------");String key = SecretKeyUtil.generateAESKey(128);System.out.println("AES key : " + key);String cardNo = encryptionService.encryptByAES(key, "231025199909090099");System.out.println("AES 加密后 : " + cardNo);String no = encryptionService.decryptByAES(key, cardNo);System.err.println("AES 解密后 : " + no);String cardNo2 = encryptionService.encryptByAES("54321");System.out.println("AES 加密后 : " + cardNo2);String no2 = encryptionService.decryptByAES(cardNo2);System.err.println("AES 解密后 : " + no2);Thread.sleep(1000);System.err.println("--------------------------------------------------------------");RSASecretKey keys = SecretKeyUtil.generateRSAKey(512);System.out.println("RSA公钥字符串 : " + keys.getPublicKeyStr());System.out.println("RSA私钥字符串 : " + keys.getPrivateKeyStr());String strRsa = encryptionService.encryptByRSA(keys.getPublicKeyStr(), "who is your daddy? 一二三三二一~ 啊啊~");System.out.println("RSA加密后 : " + strRsa);String strRsaDecode = encryptionService.decryptByRSA(keys.getPrivateKeyStr(), strRsa);System.err.println("RSA解密后 : " + strRsaDecode);String strRsa2 = encryptionService.encryptByRSA("who is your mom? 一二三!三二一!啊啊!");System.out.println("RSA加密后 : " + strRsa2);String strRsaDecode2 = encryptionService.decryptByRSA(strRsa2);System.err.println("RSA解密后 : " + strRsaDecode2);Thread.sleep(1000);System.err.println("--------------------------------------------------------------");ECCSecretKey eccKeys = SecretKeyUtil.generateECCKeyPair("secp256k1");System.out.println("ECC公钥字符串 : " + eccKeys.getPublicKeyStr());System.out.println("ECC私钥字符串 : " + eccKeys.getPrivateKeyStr());String eccStr = encryptionService.encryptByECC(eccKeys.getPublicKeyStr(), "一朝君子一朝臣!");System.out.println("ECC加密后 : " + eccStr);String eccStr2 = encryptionService.decryptByECC(eccKeys.getPrivateKeyStr(), eccStr);System.err.println("ECC解密后 : " + eccStr2);String eccStr3 = encryptionService.encryptByECC("华语乐坛永远的神!");System.out.println("ECC加密后 : " + eccStr3);String eccStr4 = encryptionService.decryptByECC(eccStr3);System.err.println("ECC解密后 : " + eccStr4);Thread.sleep(1000);System.err.println("--------------------------------------------------------------");} catch (Exception e) {throw new RuntimeException(e);}

4、配置文件(应通过SecretKeyUtil生成密钥对后妥善保管、不推荐保存在配置文件中)

encryption:tool:#    BCrypt盐值BCryptSalt: $2a$10$v4ZsqFJBrfvY8LJJnowaYO#    AES密钥AESSecretKey: jb2Aw88lSbh0I4+FFycjfQ==#    RSA公钥RSAPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCS/GYUdEmPxNFahLCxcFoArs5pR6DJ9KiDR/8h1SewavqOwIJ6VZQg8Jf5h9Nvqj/QCfdWpUxGllisKTRcwtXbF6aeO4cf+lZVmf6MPwzk7x9d7CWZVs0XtjKpUwHEVnVRwvZ/bcdCHLEMzHRmzjEhgRKlsKzPtxU+1JoflwaxvQIDAQAB#    RSA私钥RSAPrivateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJL8ZhR0SY/E0VqEsLFwWgCuzmlHoMn0qINH/yHVJ7Bq+o7AgnpVlCDwl/mH02+qP9AJ91alTEaWWKwpNFzC1dsXpp47hx/6VlWZ/ow/DOTvH13sJZlWzRe2MqlTAcRWdVHC9n9tx0IcsQzMdGbOMSGBEqWwrM+3FT7Umh+XBrG9AgMBAAECgYADD28+qMcpT6M+O7oED79H+VvB1GR0H/xsM1EMDsiTQz7xPu/YhTSe1PONFfdggU5v0e1M6AclBxdUik0VS1cxfwIfULGsJyB/GIg8cG4XFrBpnz5w/0bfxSiN5WCSpDxk58PPH3XRQZs9A/uH8iNEar1H/Gk90XT0ENEhkEDiUQJBAMO0aDUxQzZL8MBM3cXTi0HI4ITNs4hywvO5c99UGxj2j1ZuHq8HUJl7f/TGUBuooOsEsYJOECNkP8T9HsTgsEkCQQDARXOAwZTycnprsI+sb/FPn8nryYv91+4g4GL2E4hBhay5gh0nQyOeshpzNCcU/ahD75yfdYAgQeyfwhRavd3VAkEAqrOVobASfC3JFTL2zjMy6HKaw7vYuU/AlG5Sj54A9Mk7RZxPz0OGHhoHBi5keXugwN4bJxmIIhazONPAHuINYQJACkDp6vjn35IZUzrkPpbtsIhd9VQXQh9M1LYCsQrTnmLpli8JLPnYoXLwFCq41ta8LXtOx/Y1MgMyAkcQXNJ5TQJBALFPbe92kKBiEM+pVvYgb+fi1unBeRwcYjnn0H2rkDNggBNmPJkhc7TrNkT7nvtEPiaJx80lcp0Qpqt2LYQxIE8=#    ECC公钥ECCPublicKey: MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEedCM+iL9FOgq02ZBObElh78nDkZ2gOJ94AL+1Hi9IohsPA6kDTAJ7PRhxwzEX+9+bZ+QnMwluYqldCpr5mip3Q==#    ECC私钥ECCPrivateKey: MD4CAQAwEAYHKoZIzj0CAQYFK4EEAAoEJzAlAgEBBCAdkyerWJjIre12kQqXcnydD2rB1paX/FFJPehfccdQSg==

这篇关于整合了大部分常用的加密/解密工具的框架【encryption-tool】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/721981

相关文章

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决