首页 > 其他分享 >实验二 电子公文传输系统安全-进展2

实验二 电子公文传输系统安全-进展2

时间:2024-05-26 14:59:26浏览次数:16  
标签:公文 系统安全 SM4 try 传输 密钥 key new

实验二 电子公文传输系统安全-进展2

  • 上周任务完成情况(代码链接,所写文档等)
  • 本周计划

上周任务完成情况

  • 使用国密算法SM2,在注册账号时为用户生成公私钥对
try {
    // 设置 SM2 曲线参数
    ECGenParameterSpec ecGenSpec = new ECGenParameterSpec("sm2p256v1");
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());
    keyPairGenerator.initialize(ecGenSpec, new SecureRandom());

    // 生成密钥对
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
    PublicKey publicKey = keyPair.getPublic();
    // 获取桌面路径(这里假设是Windows系统,路径可能需要根据实际操作系统进行调整)
    String desktopPath = System.getProperty("user.home") + "/Desktop/";
    String fileName = number +"_sm2_private_key.pem";

    // 将私钥写入 PEM 文件
    try (JcaPEMWriter pemWriter = new JcaPEMWriter(new FileWriter(desktopPath + fileName))) {
        pemWriter.writeObject(keyPair.getPrivate());
    }
} catch (Exception e) {
    e.printStackTrace();
}

(生成的私钥以pem文件格式存放在桌面,公钥上传到数据库)

  • 使用国密算法SM4加密电子公文系统中的公文
try {
    // 使用 PBE(Password-Based Encryption)生成 SM4 密钥
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
    // 修改盐值和密钥长度,确保生成16字节(128位)的密钥
    KeySpec spec = new PBEKeySpec(en_key.toCharArray(), en_key.getBytes(), 65536, 128); // 128位密钥长度
    SecretKey tmp = factory.generateSecret(spec);
    sm4secretKey = new SecretKeySpec(tmp.getEncoded(), "SM4");
    // 加密文本
    encryptedContent = encryptSM4(replyContent, sm4secretKey);
    // SM3 哈希
    sm3Hash = generateSM3Hash(encryptedContent);
} catch (Exception e) {
    e.printStackTrace();
    // 处理异常
}

  • 接收方的公钥对SM4密钥加密
String sql2 = "SELECT public_key FROM user WHERE number = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql2)) {
    pstmt.setString(1, re_num);
    try (ResultSet rs = pstmt.executeQuery()) {
        if (rs.next()) {
            String publicKeyStr = rs.getString("public_key");
            byte[] publicBytes = Base64.getDecoder().decode(publicKeyStr);
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("EC");
            PublicKey publicKey = keyFactory.generatePublic(keySpec);
            byte[] sm4KeyBytes = sm4secretKey.getEncoded();
            byte[] encryptedSM4Key = encrypt(sm4KeyBytes, publicKey);
            encryptedSM4KeyBase64 = Base64.getEncoder().encodeToString(encryptedSM4Key);
        }
    }
}
  • 接收方使用自己的私钥解密对称密钥,对称密钥解密密文
// 解密SM4密钥
byte[] encryptedSM4Key = Base64.getDecoder().decode(ened_key);
byte[] decryptedSM4KeyBytes = decrypt(encryptedSM4Key, privateKey);
SecretKey decryptedSM4Key = new SecretKeySpec(decryptedSM4KeyBytes, "SM4");
// 使用SM4解密内容
decryptedContent = decryptSM4(encryptedContent, decryptedSM4Key);
} catch (Exception e) {
e.printStackTrace();
} finally {
response.sendRedirect("show.jsp?number=" + re_number + "&decryptedContent=" + decryptedContent);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}

过程:
发送公文
查看收到的公文
查看解密后的公文内容

本周计划

1.完善相关界面
2.进一步简化改进代码

标签:公文,系统安全,SM4,try,传输,密钥,key,new
From: https://www.cnblogs.com/fanchaoming/p/18213650

相关文章

  • 实验二 电子传输系统安全-进展2
    实验二电子传输系统安全-进展2上周任务学习gmssl相关知识学习加密相关知识,选择合适的国密算法部署安装gmssl中的算法库将相关算法库接口利用maven导入系统进行调用调试运行更改加密算法后的系统·学习密码项目标准进行系统优化上周任务完成情况学号姓名任务完成......
  • IceRPC之多路复用传输>快乐的RPC
    作者引言很高兴啊,我们来到了IceRPC之多路复用传输>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界。icerpc和多路复用传输了解icerpc协议和多路复用传输icerpc协议当创建到服务器地址icerpc://hello.zeroc.com的客户端连接时,指示IceRPC建立使用ic......
  • 实验二 电子传输系统安全-进展2
    任务详情上周任务完成情况(代码链接,所写文档等)本周计划上周任务完成情况采用sm4对存储的公文进行加密处理,密钥随机生成,乱序存储在数据库中。其中sm4采用cbc模式,iv固定,跟随密文一起存储。解密的时候读取密文并分离密文和iv,然后解密。SM3加盐存储代码packagecn.edu.nuc.a......
  • 探索SPI单线传输模式:时钟线与数据传输的简化之道
    探索SPI单线传输模式:时钟线与数据传输的简化之道在当今的嵌入式系统和微控制器通信中,串行外设接口(SPI)因其高速、全双工和同步的特点而广受欢迎。然而,随着设备尺寸和复杂性的不断减少,对SPI通信的简化需求也日益增加。在这种背景下,SPI的单线传输模式成为了一个备受关注的解决方案。......
  • 实验二 电子公文传输系统安全-进展2
    实验二电子公文传输系统安全-进展2任务详情上周任务完成情况(代码链接,所写文档等)本周计划上周任务完成情况SM3加盐packagecn.edu.nuc.article.util;importorg.bouncycastle.crypto.digests.SM3Digest;importorg.bouncycastle.jce.provider.BouncyCastleProvider;......
  • Bash反弹shell & 搭建网页服务器 & 文件描述符学习 & ssh连接vm虚拟机 & sftp进行文件
    环境:kali:┌──(kali㉿kali)-[~/Desktop]└─$cat/proc/versionLinuxversion6.0.0-kali5-amd64([email protected])(gcc-12(Debian12.2.0-9)12.2.0,GNUld(GNUBinutilsforDebian)1.建立一个简单的链接进行nc,可以进行两个端口通信!#首先使用nc监听......
  • 什么样的数据摆渡设备,可以满足不同网间数据的安全传输需求?
    数据摆渡设备是用来在不同的网络环境间安全地传输数据的硬件或软件解决方案。它们通常用于确保在具有不同安全级别的网络(如内网和外网)之间进行数据交换时的安全性和合规性。以下是一些常见的数据摆渡设备和方法:移动介质拷贝:使用U盘或移动硬盘等移动介质进行数据拷贝,这是一种比较......
  • 如何冲破传统传输形态带来的风险,保护核心研发数据?
    企业的核心资产主要体现在其科技创新和信息技术领域的核心竞争力和技术优势,因此研发数据就是企业最核心的数据资产,对企业具有至关重要的意义。研发数据通常指的是在产品或技术的研发过程中产生的各种数据,包括但不限于:实验数据:实验过程中收集的数据,如测试结果、性能指标等;设计数......
  • 如何保障EDA数据传输过程中,核心数据的安全可靠流转?
    EDA是指利用计算机辅助设计软件,来辅助完成超大规模集成电路芯片的设计,制造、封装、测试整个流程。随着芯片设计的复杂程度不断的提升,基于先进工艺节点的这种集成电路的规模,可以达到数10亿个半导体的器件,所以不借助EDA已经无法完成芯片的设计,因此EDA已经成为芯片设计的必要工具,是推......
  • 4/7一文讲透网络传输流程 epoll内核模型 reactor用户空间处理模型
    epoll是内核如何将由层层协议栈去除tcp头,根据四元组查socket文件,将sk_buffer放到socket接受队列的 reactor  五种IO模型,三种线程处理模型     回溯算法之全排列 将所有需要用到的数组包括路径数组状态数组都初始化好然后都放进dfs参数里面 这......