SM2 加密解密 公式密匙 导出

简介: SM2 加密解密 公式密匙 导出

借用 hutool-all,bouncycastle实现,公式密匙导出文件,解密再读取文件


pom.xml

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.7</version>
        </dependency>
          <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
             <version>1.64</version>
        </dependency>

demo

  String text = "我是一段测试aaaa";
        KeyPair pair = SecureUtil.generateKeyPair("SM2");
        byte[] privateKeyArray = pair.getPrivate().getEncoded();
        byte[] publicKeyArray = pair.getPublic().getEncoded();
        writeBytesToFile(privateKeyArray, "d:/privatekey.pem");
        writeBytesToFile(publicKeyArray, "d:/publickey.pem");
        PrivateKey privateKey = SecureUtil.generatePrivateKey("SM2", getBytesFromFile(new File("d:/privatekey.pem")));
        PublicKey publicKey = SecureUtil.generatePublicKey("SM2", getBytesFromFile(new File("d:/publickey.pem")));
        SM2 sm2 = new SM2();
        sm2.setPrivateKey(privateKey);
        sm2.setPublicKey(publicKey);
// 公钥加密,私钥解密
        String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
        System.out.println(encryptStr);
        String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
        System.out.println(decryptStr);
    public static void writeBytesToFile(byte[] bs, String path) throws IOException {
        OutputStream out = new FileOutputStream(path);
        InputStream is = new ByteArrayInputStream(bs);
        byte[] buff = new byte[1024];
        int len = 0;
        while ((len = is.read(buff)) != -1) {
            out.write(buff, 0, len);
        }
        is.close();
        out.close();
    }
    // 返回一个byte数组
    public static byte[] getBytesFromFile(File file) throws IOException {
        InputStream is = new FileInputStream(file);// 获取文件大小
        long lengths = file.length();
        System.out.println("lengths = " + lengths);
        if (lengths > Integer.MAX_VALUE) {
            // 文件太大,无法读取
            throw new IOException("File is to large " + file.getName());
        }
        // 创建一个数据来保存文件数据
        byte[] bytes = new byte[(int) lengths];// 读取数据到byte数组中
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
            offset += numRead;
        }
        // 确保所有数据均被读取
        if (offset < bytes.length) {
            throw new IOException("Could not completely read file " + file.getName());
        }
        // Close the input stream and return bytes
        is.close();
        return bytes;
    }
相关文章
|
3月前
|
NoSQL 测试技术 Go
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
|
算法 前端开发 JavaScript
SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
1242 2
|
安全 算法 搜索推荐
探索密码学的未来:SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算
探索密码学的未来:SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算
691 0
|
机器学习/深度学习 算法 Python
RSA 加密算法主要公式
RSA 加密算法主要公式
127 0
|
存储 算法 安全
同态随机基加密的量子多方密码-数学公式
同态随机基加密的量子多方密码-数学公式
88 0
|
前端开发 数据安全/隐私保护
国产sm2加密算法
国产sm2加密算法
406 0
|
移动开发 算法 Linux
mPaaS MGS配置SM2国密加密指南
因当前国家信息安全监管总局对金融类App监管要求,涉及到数据安全通信加密算法必须要使用国密的规定。众多使用mPaaS框架的银卡金融客户,因早期大多数都是在网关配置的RSA加密或者ECC加密算法,当接到监管要求后,都要更改网关加密算法为国密,因需求众多mPaaS团队也为此开发了网关同时兼容多个加密方式的功能,去解决客户侧因更换加密算法造成的种种不便和问题。 mPaaS 对国密算法加密客户端、网关都是支持的,这里整理一份从生成SM2到mPaaS配置完成的完整指南。
469 0
mPaaS MGS配置SM2国密加密指南
|
移动开发 监控 Linux
技术干货 | 使用 mPaaS 配置 SM2 国密加密指南
随着移动智能终端的广泛应用,敏感信息极易被监控或盗取,给国家、企事业及个人带来极大政治、经济损失。金融和重要领域的各个企业正在逐步落实并完成国产密码改造工作。为解决客户侧因更换加密算法造成的种种不便,mPaaS 现已支持移动网关服务兼容多种加密方式。本文将就如何生成 SM2 密钥以及完成 mPaaS 配置等问题展开详细的说明。
867 0
技术干货 | 使用 mPaaS 配置 SM2 国密加密指南
|
安全 算法 网络安全
SM2 国密算法SSL证书应用于HTTPS加密,如何实现?
服务端如何实现基于国密算法的SSL加密连接呢?如何解决国密算法的浏览器兼容性问题?
5195 0
|
5天前
|
SQL 安全 网络安全
数字堡垒之下:网络安全漏洞与加密技术的较量
在数字化的浪潮中,网络安全成为了保护信息资产的坚固堡垒。本文将探讨网络安全面临的挑战,特别是安全漏洞和加密技术的重要性,同时强调提升个人和企业的安全意识的必要性。我们将从网络攻击者利用安全漏洞的方式谈起,深入到加密技术如何成为防御手段的核心,最后探讨如何通过教育和实践提高安全防范能力,共同构建更安全的网络环境。