商用密码
商用密码(Commercial Cryptography)涉及到多个方面,包括但不限于数据加密、数字签名、身份验证和安全通信等。商用密码的目的是保护信息的机密性、完整性和可用性,确保数据在存储和传输过程中的安全。以下是一些Java商用密码方向的关键技术和应用领域:
1. 加密算法
对称加密:AES、DES、3DES等,主要用于数据加密,特点是加密和解密使用同一个密钥。
非对称加密:RSA、ECC(椭圆曲线加密)、DH(Diffie-Hellman)等,主要用于数据加密和数字签名,特点是有公钥和私钥,公钥用于加密或验证签名,私钥用于解密或生成签名。
2. 散列函数
SHA-256、SHA-3、MD5(尽管MD5已经不再安全,不推荐用于敏感信息的安全性保护),用于确保数据完整性,通过对数据生成固定长度的摘要信息。
3. 数字签名
使用非对称加密技术,如RSA、DSA(数字签名算法)等,保证信息的来源和完整性。
4. 安全通信协议
SSL/TLS(现在主要是TLS)用于Web服务器和浏览器之间的安全通信。
DTLS,适用于UDP协议的安全版本,常用于物联网(IoT)通信。
5. 身份认证和授权
OAuth 2.0、OpenID Connect等用于身份认证和授权。
JWT(JSON Web Tokens)用于创建可以安全传输的访问令牌。
6. 安全存储
密码学方法用于加密存储在数据库或文件系统中的敏感数据。
7. Java加密架构(JCA)和Java加密扩展(JCE)
Java提供了一套加密框架,即JCA和JCE,它们提供了一套API,用于实现加密、密钥生成和管理、安全随机数生成等功能。通过这些API,可以轻松地在Java应用程序中实现安全功能。
应用领域
金融服务:在线支付、移动支付、银行交易等。
电子商务:用户数据保护、交易加密。
云计算与数据中心:数据加密存储、安全通信。
物联网(IoT):设备身份验证、数据加密。
政府和企业系统:文档加密、电子邮件加密、身份和访问管理。
在Java中实现商用密码功能,可以依赖于Java加密架构(JCA)和Java加密扩展(JCE)。下面我将通过一些简单的示例来演示如何在Java中使用这些技术来实现加密、解密、生成摘要、进行数字签名等常见的密码学操作。
1. 使用AES对数据进行加密和解密
AES(高级加密标准)是一种广泛使用的对称加密算法。以下是一个简单的示例,展示了如何使用AES进行加密和解密:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;public class AESExample {public static void main(String[] args) throws Exception {// 生成AES密钥KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128); // 可以是128, 192或256位SecretKey secretKey = keyGenerator.generateKey();byte[] keyBytes = secretKey.getEncoded();// 创建AES密钥规范SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");// 加密数据Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, keySpec);byte[] encrypted = cipher.doFinal("Hello, World!".getBytes());System.out.println("Encrypted text: " + new String(encrypted));// 解密数据cipher.init(Cipher.DECRYPT_MODE, keySpec);byte[] original = cipher.doFinal(encrypted);System.out.println("Decrypted text: " + new String(original));}
}
2. 使用RSA进行数据加密和解密
RSA是一种非对称加密算法,通常用于加密小块数据或加密对称密钥。以下是使用RSA加密和解密数据的示例:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;public class RSAExample {public static void main(String[] args) throws Exception {// 生成RSA密钥对KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();// 使用公钥加密数据Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] encrypted = cipher.doFinal("Hello, World!".getBytes());System.out.println("Encrypted text: " + new String(encrypted));// 使用私钥解密数据cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decrypted = cipher.doFinal(encrypted);System.out.println("Decrypted text: " + new String(decrypted));}
}
3. 生成和验证数字签名
数字签名用于验证消息的完整性和来源。以下是使用RSA生成和验证数字签名的示例:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;public class DigitalSignatureExample {public static void main(String[] args) throws Exception {// 生成RSA密钥对KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();// 生成数字签名Signature signature = Signature.getInstance("SHA256withRSA");signature.initSign(privateKey);byte[] data = "Hello, World!".getBytes();signature.update(data);byte[] digitalSignature = signature.sign();System.out.println("Signature: " + new String(digitalSignature));// 验证数字签名signature.initVerify(publicKey);signature.update(data);boolean isValid = signature.verify(digitalSignature);System.out.println("Signature valid? " + isValid);}
}
相关文章:
商用密码
商用密码(Commercial Cryptography)涉及到多个方面,包括但不限于数据加密、数字签名、身份验证和安全通信等。商用密码的目的是保护信息的机密性、完整性和可用性,确保数据在存储和传输过程中的安全。以下是一些Java商用密码方向的…...

css1文本属性
一.颜色(color)(一般用16进制) 二.对齐(text-align) 三.装饰(text-decoration) 四.缩进(text-indent)(一般用2em)(有单位)…...

在容器中使用buildah构建镜像
简介 buildah是一个构建OCI标准镜像的工具,可以用来替代docker build 在常见的linux发行版中可直接通过包管理工具安装使用 # centos yum install buildah# ubuntu/debian apt install buildah# alpine apk add buildah其他发行版安装方法详见 github,…...

GPT4_VS_ChatGPT(from_nytimes)
GPT4 VS ChatGPT(from nytimes ) 正如文章官网博文:https://openai.com/research/gpt-4所述,GPT4仍有很多不足之处,还不及人类水平。纽约时报报道了一些人体验GPT4的效果和一些评价: Cade Metz 要求专家使…...
中兴R5300G4服务器查看服务器、主板序列号及硬盘RAID信息
本文在操作系统带内通过指令操作查看中兴R5300G4服务器、主板序列号及硬盘RAID信息。 一、中兴R5300G4服务器查看服务器、主板序列号 在Linux服务器上,可以使用dmidecode命令来查看服务器的硬件相关信息,由于该命令要读取系统的硬件信息,因…...

部署tomcat
1 idea打包完,找到target目录下的网站 我的叫做 test.webSYS 2 linux 安装 tomcat 后 修改conf下的server.xml中的Connector的port <Connector port"9001" protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443…...

【Java 数据结构】枚举
枚举的使用 1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射,拿到实例对象呢? 5 总结面试问题(单例模式学完后可以回顾): 1 背景及定义 public static final int RED 1; public static final int GREEN 2; public …...

Python(20)正则表达式(Regular Expression)中常用函数用法
大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 正文 正则表达式 粗略的定义:正则表达式是一个特殊的字符序列,帮助用户非常便捷的检查一个字符串是否符合某种模…...
docker 离线安装镜像
一、导出镜像 下载完镜像后,我们需要将其导出为tar文件,以便在离线环境中使用。 执行以下命令导出镜像: docker save -o <保存路径>/<镜像名>_<版本>.tar <镜像名>:<版本>其中,<保存路径>是…...

由vscode自动升级导致的“终端可以ssh服务器,但是vscode无法连接服务器”
问题描述 简单来说就是,ssh配置没动,前两天还可以用vscode连接服务器,今天突然就连不上了,但是用本地终端ssh可以顺利连接。 连接情况 我的ssh配置如下: Host gpu3HostName aaaUser zwx现在直接在终端中进行ssh&am…...

typecho 在文章中添加 bilibili 视频
一、获取视频来源: 可以有2种方式来定位一个 bilibili 视频: 第一种是使用 bvid 参数定位第二种是使用 aid 参数定位 如何获取这两个参数? 首先我们可以看看 bilibili 网站中的视频页面链接其实可以分为两种: 第一种是类似&a…...

Android.mk 语法详解
一.Android.mk简介 Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成(exe,so,a,jar,apk)等文件。 二.Android.mk编写 分析一个最简单的Android.mk LOCAL_PATH : $(call my-dir) //定义了…...

ChatGPT高效提问—prompt基础
ChatGPT高效提问—prompt基础 设计一个好的prompt对于获取理想的生成结果至关重要。通过选择合适的关键词、提供明确的上下文、设置特定的约束条件,可以引导模型生成符合预期的回复。例如,在对话中,可以使用明确的问题或陈述引导模型生成…...
Elasticsearch 中的索引的分区(Shards)和副本(Replicas)的使用
Elasticsearch是一个高性能的、分布式的搜索与数据分析引擎,广泛用于全文搜索、结构化搜索、分析以及这三者的组合场景。在Elasticsearch中,“索引”(Index)是其最基本的数据管理单位,可以类比为传统关系数据库中的“数…...
智慧工地反光衣识别检测系统-自动识别是否穿着制定工作服---豌豆云
智慧工地反光衣识别检测特定地区工作人员不穿反光服装个人行为预警,一旦检测到某些不穿反光服装施工作业人员智慧工地反光衣识别检测马上开启警报。 真真正正做到事前预警、事中检测、过后管理。安全操作规程工作人员从繁杂无趣的盯显示屏的每日任务中抽身出去。 …...
vue绘制语音波形图---wavesurfer.js
文章目录 创建实例optionsmethod接收Blob流 https://wavesurfer.xyz/ 创建实例 引入插件:import WaveSurfer from "wavesurfer.js"创建实例对象:this.wavesurfer WaveSurfer.create(options); <div id"waveform"><!-- t…...

MPLS——多协议标签交换
目录 1 多协议标签交换 MPLS 1.1 MPLS 的工作原理 1.1.1 MPLS 工作特点 1.1.2 MPLS 协议的基本原理 1.1.3 MPLS 的基本工作过程 1.2 转发等价类 FEC 1.2.1 FEC 用于负载平衡 1.3 MPLS 首部的位置与格式 1.3.1 MPLS 首部的位置 1.3.2 MPLS 首部的格式 1.4 新一代的…...

Idea使用Lombok失效解决方案
问题描述 启动项目时,使用lombok插件中slf4g注解后其中的log显示找不到变量 解决方案 在以下位置加入该配置-Djps.track.ap.dependenciesfalse Preferences | Build, Execution, Deployment | Compiler 之后保存应用就好,亲测有效。...

Java实现网上药店系统 JAVA+Vue+SpringBoot+MySQL
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…...

谁是嫌疑犯问题
问题描述: 有6名犯罪嫌疑人A、B、C、D、E、F,已知如下事实: A、B至少有1人作案; A、E、F三人中至少有2人参与作案; A、D不可能是同案犯; B、C或同时作案,或与本案无关; C、D中…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...