加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

news2024/10/7 8:29:26

文章目录

  • Java Cryptography Architecture (JCA)
  • 开源国密库
  • 国密算法
    • 对称加密(DES/AES⇒SM4)
    • 非对称加密(RSA/ECC⇒SM2)
    • 散列(摘要/哈希)算法(MD5/SHA⇒SM3)
  • 在线生成公钥私钥对,RSA公私钥生成
  • 参考

在这里插入图片描述


Java Cryptography Architecture (JCA)

https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html

Java加密体系(Java Cryptography Architecture,JCA)是Java平台的一部分,它提供了一套用于加密、密钥生成和管理的API。JCA的设计目标是能够插入不同的加密服务提供者(Cryptography Service Providers,CSP),使得Java应用程序能够在各种加密算法和协议中灵活选择。
JCA的主要组件包括:

  1. Cipher类:用于加密和解密数据的类。它支持多种加密模式,如电子密码本(ECB)、密码块链(CBC)、计数器(CTR)等,以及多种填充模式,如PKCS5Padding、NoPadding等。
  2. Key接口和其子类:表示加密密钥的接口,有不同类型的密钥,如SecretKey、PublicKey和PrivateKey。
  3. KeyPairGenerator和KeyGenerator类:用于生成密钥对和密钥的类。
  4. KeyStore类:用于存储和管理密钥和证书的类。
  5. MessageDigest类:用于生成哈希摘要的类,支持多种哈希算法,如MD5、SHA-1、SHA-256等。
  6. Signature类:用于生成和验证数字签名的类。
  7. SecureRandom类:用于生成安全随机数的类。
  8. Security类和Provider类:Security类用于管理已安装的加密服务提供者,而Provider类则是加密服务提供者的基类。

JCA还支持加密算法的参数设置,如密钥大小、迭代次数等,通过AlgorithmParameterSpec接口及其子类实现。


Java加密体系(JCA)支持多种加密算法,包括对称加密、非对称加密、哈希(散列)算法和数字签名算法。JCA支持的常见加密算法:

对称加密算法:

  • AES (Advanced Encryption Standard)
  • DES (Data Encryption Standard)
  • DESede (Triple DES)
  • RC2 (Rivest Cipher 2)
  • RC4 (Rivest Cipher 4)
  • Blowfish
  • Camellia

非对称加密算法:

  • RSA
  • DSA (Digital Signature Algorithm)
  • EC (Elliptic Curve)算法,包括ECDSA和ECDH

哈希(散列)算法:

  • MD5 (Message Digest 5)
  • SHA-1 (Secure Hash Algorithm 1)
  • SHA-256 (SHA-2 family)
  • SHA-384 (SHA-2 family)
  • SHA-512 (SHA-2 family)

数字签名算法:

  • RSA
  • DSA
  • ECDSA (Elliptic Curve Digital Signature Algorithm)

这些算法可以用于各种加密操作,如数据加密、密钥交换、哈希生成和数字签名。JCA通过Cipher类、Signature类、MessageDigest类等提供了对这些算法的支持。

随着加密技术的发展和安全性的变化,一些算法(如MD5和SHA-1)由于已不再被认为是安全的,因此在某些情况下可能不再推荐使用。

Demo示例

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class JCACryptoExample {

    public static void main(String[] args) throws Exception {
        // 生成AES密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 设置密钥大小为128位
        SecretKey secretKey = keyGenerator.generateKey();

        // 加密数据
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        String plainText = "This is a secret message!";
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        String encryptedBase64 = Base64.getEncoder().encodeToString(encryptedBytes);
        System.out.println("Encrypted (Base64): " + encryptedBase64);

        // 解密数据
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedBase64));
        String decryptedText = new String(decryptedBytes);
        System.out.println("Decrypted: " + decryptedText);
    }
}

首先使用KeyGenerator生成一个AES密钥。然后,我们创建一个Cipher实例来初始化加密模式,并使用生成的密钥对字符串进行加密。加密后的数据被转换为Base64编码的字符串以便于显示。接着,我们重新初始化Cipher以解密模式,并使用相同的密钥对加密后的数据进行解密,最后将解密后的数据转换回原始字符串


开源国密库

名称描述GitHub
crypto-jsMD5、SHA1、SHA2、SHA3、RIPEMD-160 的哈希散列,AES、DES、Rabbit、RC4、Triple DES 对称加解密https://github.com/brix/crypto-js
JSEncrypt非对称RSA加解密,只支持浏览器,不支持Nodehttps://github.com/travist/jsencrypt
node-rsa支持Node运行的RSA加解密库https://github.com/rzcoder/node-rsa
Web Cryptography APIW3C制定的密码规范API,主流浏览器、Node15都已支持https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API
opensm开源国密SM2/SM3/SM4算法,基于GmSSL,基于OpenSSL1.1.0,7年前(老)https://github.com/zhangyantao/opensm
TencentKonaSMSuite腾讯开源的国密套件SDK(Java)https://github.com/tencent/TencentKonaSMSuite
sm-crypto国密算法sm2、sm3和sm4的JavaScript实现,有关联java版https://github.com/JuneAndGreen/sm-crypto
gm-crypto国密算法sm2、sm3和sm4的JavaScript实现https://github.com/byte-fe/gm-crypto
sm-crypto-v2国密算法 sm2、sm3 和 sm4 的 JavaScript 实现https://github.com/Cubelrti/sm-crypto-v2
GmSSL北京大学国密开源库,包含多个版本Java、JS、PHP、Go…,没有npm包https://github.com/guanzhi/GmSSL
Tongsuo 铜锁阿里开源的综合性基础密码库,功能比较全https://github.com/Tongsuo-Project/Tongsuo

国密算法

在这里插入图片描述

国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,在一般信息化系统开发中主要使用公开的SM2(非对称)、SM3(摘要)、SM4(对称)三类算法。

Base64是一种编码格式,并不属于加密,常用于数据传输、兼容性问题。Base64编码本质上是一种将二进制数据转成文本数据的方案,将一些不适合传输的数据内容进行编码来适合传输。

对称加密(DES/AES⇒SM4)

🔸基本特点:

  • 同一个秘钥进行加密、解密。因此秘钥的保密性就很重要,不能泄漏。
  • 计算量小、效率高。

🔸应用场景:

  • 数据加密存储。
  • 加密通信,如HTTPS、SSL、VPN,会与其他加密算法混合使用。

非对称加密(RSA/ECC⇒SM2)

🔸基本特点:

  • 密钥配对:一个私钥、一个公钥,用私钥加密,用公钥解密。注意每一个密钥对都是独一无二、天生一对的,只能配对的秘钥加密、解密。简单来说,公钥加密的数据,只能配对的私钥才能解密。
  • 安全性高,但计算量大。
  • 基本原理:利用某一数学公式,正向计算容易,反向推理则非常难。

🔸应用场景:

  • HPPTS、SSH协议,如Git的ssh认证。
  • HTTPS的安全传输就是混合了非对称加密、对称加密,非对称加密协商会话秘钥,用会话秘钥对称加密传输数据。
  • 敏感数据的加密传输,如客户端登录时传输用户名、密码信息时,采用公钥加密数据,服务端私钥解密。
  • 对数据进行签名、验签,保障数据的完整性,同时验证身份。

散列(摘要/哈希)算法(MD5/SHA⇒SM3)

🔸基本特点:

  • 无需秘钥,“加密”后的数据不可逆。所以这也不算是“加密”,一般称为哈希(Hash)。
  • 任何长度的数据生成的哈希值长度都固定。
  • 相同数据每次生成的哈希值相同,不同的数据则不同。

🔸应用场景:

  • 数据摘要/哈希,验证数据是否被篡改、或数据丢失,保障数据的完整性、不可篡改性。
  • 单向加密保存数据,如密码的保存,密码的存储普遍都是存的哈希值,登录时比较其hash值即可。

🔸彩虹表破解:

由于散列算法的特点(同一数据生成哈希值始终一样),如果存储了大量(海量)字符内容的哈希值,就很容易进行查询破解了,这就是彩虹表,暴力破解也是一样的道理。常用的6位数字密码是相当容易破解的,如CMD5这个网站就利用存储的大量密文字典,反向查询破解。怎么解决呢?

  • 提升散列算法的安全性,常用方法就是加“盐”,核心思想就是在哈希过程中添加一些自定义的内容、规则,仅自己知道,从而避免被字典破解。

  • 最简单的比如在密文中某一位置添加一串随机字符,只有自己知道,使用的时候去掉干扰字符即可。

  • 加盐的具体方式很多,可以自己DIV,常用的一种模式如下图,加盐+双重哈希。 MD5(MD5(password) + salt)

  • 如果加盐的规则被窃取了,对于现代的硬件是挺容易被破解的,只能设置尽量复杂的密码+定期更换了。

📢实际应用中,可能会多种加密算法组合使用。

  • 比如HTTPS的安全数据传输就是同时用了对称加密、非对称加密,用非对称传送(动态)密钥,对称加密传输数据。 《HTTP协议图文简述》

  • 对一个数据进行多重加密,以防被破解


在线生成公钥私钥对,RSA公私钥生成

https://www.metools.info/code/c80.html

RSA非对称加密公私钥对生成,输出PEM格式的公私钥对,同时支持PKCS#1、PKCS#8密钥格式输出;生成的公私钥对,可拷贝到文本文件,保存为.key文件即可使用。

  • PEM格式:RSA公私钥对常用的编码方式,OPENSSL以PEM格式为主,相对DER可读性更强,以BASE64编码呈现;
    开头类似 -----BEGIN PRIVATE KEY-----
    结尾类似 -----END PRIVATE KEY-----

  • PKCS#8密钥格式,多用于JAVA、PHP程序加解密中,为目前用的比较多的密钥、证书格式;

  • PKCS#1密钥格式,多用于JS等其它程序加解密,属于比较老的格式标准。

  • PKCS#1和PKCS#8的主要区别,从本质上说,PKCS#8格式增加验证数据段,保证密钥正确性。


参考

国密SSL实验室
国家密码管理局-密码规范
前端加密·国密算法
一文读懂“密评”实施流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BGP中的TCP连接源地址问题

3.TCP连接源地址(用loop back地址是最优选择) 应用场景与理论: 由于BGP应用于大型网络中,为了避免单点失败,往往需要通过多条链路连接,当一条链路故障时候就用另一条链路继续工作,但是BGP又无法…

Navicat安装与连接教程

navicat 的安装 官网:https://www.navicat.com.cn/ 进入官网之后点击左上角的产品,然后往下滑动就可以看见许多类型,我们使用的是MongoDB数据库,所以就下载Navicat 17 for MongoDB 进入到这里之后,选择自己的系统版本…

llm-universe | 三. 搭建知识库

搭建知识库 一. 词向量和向量知识库1. 词向量1.词向量概念2.词向量优势3. 一般构建词向量的方法 2.向量数据库 二. 使用Embedding API三. 数据处理一.读取文档1. PDF 文档2.MD 文档 二.数据清洗三.文档分割 四.搭建并使用向量数据库一.前序工作二. 构建Chroma向量库三、向量检索…

农业新质生产力数据(2012-2022年)原始+dofile+测算数据集

数据简介:农业新质生产力是指在现代农业发展中,通过融合尖端科技、信息技术与创新管理模式,实现农业生产效率飞跃、产品质量显著提升及生产可持续性增强的一种革新性生产能力,农业新质生产力代表了从依赖传统资源转向依靠科技创新…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…

在WSL Ubuntu中启用root用户的SSH服务

在 Ubuntu 中,默认情况下 root 用户是禁用 SSH 登录的,这是为了增加系统安全性。 一、修改配置 找到 PermitRootLogin 行:在文件中找到 PermitRootLogin 配置项。默认情况下,它通常被设置为 PermitRootLogin prohibit-password 或…

【papaparse插件】前端预览csv文件

需求:就是可以在前端直接预览csv文件的内容 1.了解csv文件 1.1 csv文件和xlsx、xls文件的异同 首先了解一下csv文件和excel文件(xlsx,xls)有什么异同,简单来说他们都是存储表格数据的文件,csv只能显示较…

怎样规避液氮容器内部结霜的问题

液氮容器内部结霜问题一直是我们在使用液氮储存罐时遇到的一个棘手难题。液氮的极低温度使得容器内部很容易产生结霜现象,这不仅影响了容器的正常使用,还可能对内部样品或设备造成损坏。因此,如何有效规避液氮容器内部结霜问题成为了每个使用…

软件工程实验

实验环境和需求 用户可以对相片进行按类别管理,用户可以设定不同的类别,然后上传照片到相应的类别中,并能进行照片的删除,注释 运行 运行并访问 localhost 8090,图片在数据库中的信息是D:/upgrade 后面的内容 se…

FCN/UNET/deeplabv3 语义分割 标注 重叠/重复/覆盖 的处理方案,以及自定义覆盖优先级

在对FCN/UNET/deeplabv3等语义分割时,标准的要求是对每一个像素点分开标记,即不允许出现重叠覆盖的情形:如下图所示 但不可避免的人工标注时会出现一定的标注重叠/重复/覆盖甚至有的时候需要标注就是重复的,例如需要识别面板上赃物的情形,标记了面板和脏污,标注是重叠的,但是实…

陶瓷化聚烯烃研究逐渐增多 行业即将进入规模化生产阶段

陶瓷化聚烯烃研究逐渐增多 行业即将进入规模化生产阶段 陶瓷化聚烯烃是一种陶瓷化高分子材料,同时也是一种防火阻燃复合材料,主要由聚烯烃(作为基材)、成瓷填料(如无机硅酸盐等)、助熔剂、补强剂&#xff0…

【安全开发】内网扫描器

文章目录 前言现实现的功能较少后序开发会逐步加入简单漏洞探探测和代理功能。 一、开发过程1.项目结构2.main.go3.core模块3.1 scanner.go3.2 service.go 4.bruteforc4.1 bruteforce.go 二、使用步骤 前言 为什么要写这个? fscna被杀的概率太高(哪天二…

JS(JavaScript)事件处理(事件绑定)趣味案例

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…

float8格式

产生背景 在人工智能神经元网络中,一个参数用1字节表示即可,或者说,这是个猜想:因为图像的颜色用8比特表示就够了,所以说,猜想神经元的区分度应该小于256。 数字的分配 8比特有256个码位,分为…

免费分享:2015-2020年中国区域温度植被干旱指数(TVDI)月数据(附下载方法)

温度植被干旱指数(Temperature Vegetation Dryness Index,TVDI)是一种基于归一化植被指数(NDVI)与地表温度(LST)的土壤水分反演模型,能较好的进行干旱监测,尤其是监测特定年内某一时期整个区域的相对干旱程度,并可用于研究干旱程度…

华为牵手居然之家,智能家居惊喜可期

在这个科技飞速发展的时代,智能家居已逐渐从概念走向现实。华为,作为全球知名的信息与通信技术解决方案提供商,近期与居然之家达成战略合作,入局智能家居领域,无疑为我们带来了无限的遐想和期待。 华为一直以来在技术创…

8个成功的原型设计案例分享

原型设计在整个产品设计过程中非常的重要,定下了整个产品的基调,想要做好原型设计,需要不断的经验的积累,新手入门最快的方式就是学习一些优秀的原型设计案例,今天就为大家分享一些可以直接使用源文件进行编辑和修改的…

【网络架构】keepalive

目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…

【算法专题--栈】后缀表达式求值 -- 高频面试题(图文详解,小白一看就会!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题思路 ⭐案例图解 四、总结与提炼 五、共勉 一、前言 后缀表达式求值 这道题,可以说是--栈专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中&…