java 数字信封_使用加密狗的国密算法实现B/S架构数字信封

本文详细介绍了如何使用Java实现基于国密算法SM2和SM4的数字信封,结合加密狗在B/S架构中进行安全的数据传输。在过程中,通过解析X.509格式的国密证书,使用BouncyCastle库解决JDK不支持国密椭圆曲线的问题,并解决了与加密狗解密过程中的密文顺序和额外字节问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、程序逻辑

加密-上传

浏览器发起A用户的上传请求

服务端生成会话密钥Ks,用A用户的公钥Ka进行SM2加密为密钥Ks’,发给浏览器

浏览器收到加密后的会话 密钥Ks’,用A用户的私钥Ka’进行SM2解密得到会话密钥Ks

浏览器使用会话密钥Ks,对上传文件进行SM4加密得到密文M’,发给服务端

服务端保存密文M’以及会话密钥Ks

二、技术实现

2.1 密钥传输部分(步骤1-3)

SM2证书解析

首先测试浏览器端加密狗ocx插件,可以使用ocx获取证书。

加密狗ocx测试页

经厂家确认,证书格式为X.509。将证书直接写在服务端代码内,尝试解析证书并获取公钥Ka。代码如下:

// 证书

String cert64 = "MIIBvzCCAWa…F2yvFQ==";

// base64解码

byte[] certBytes = Base64.getDecoder().decode(cert64);

InputStream inStream = new ByteArrayInputStream(certBytes);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

// x509解析

X509Certificate cert = (X509Certificate)cf.gene

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值