首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SM 国密算法踩坑指南

SM2 数字签名另外一种方式就比较简单,格式为R|S,即直接两者拼接在一起表示。 通常使用软件加密产生数字签名将会使用这种数据格式。...SM2 算法也可以使用软加密的方案,底层主要依赖 Bouncy Castle 库。 软加密的方案在于开箱即用,开发成本较低。...软件加密方案,Bouncy Castle 库封装的工具类,已经大大降低国密开发的难度。...但是如果我们使用 BC 库加签输出格式直接使用 R|S。 如果是这种情况,我们就需要在明文 R|SASN.1 之间做相互的转换。 最新版本的 BC 库,已经提供转换的换方式。...// 前面输出 R|S new SM2Signer(PlainDSAEncoding.INSTANCE, new SM3Digest()); 如果是低版本,只能通过自己写代码转换了。

6.4K21

加密与安全_面向密码学的开源库BouncyCastle

以下是 Bouncy Castle 的一些主要特点功能: 广泛的算法支持:Bouncy Castle 支持多种密码学算法,包括常见的哈希算法(如MD5、SHA-1、SHA-256)、对称加密算法(如...同时,Bouncy Castle 也提供了丰富的文档示例,帮助开发人员快速上手。...开源社区支持:作为一个开源项目, Bouncy Castle 社区活跃,用户可以在社区中寻求帮助、交流经验,共同推动库的发展完善。....getBytes("UTF-8")); // 完成消息摘要的计算,得到摘要结果: byte[] result = md.digest(); // 摘要结果转换为正数...: BigInteger bigIntegerResult = new BigInteger(1, result); // 正数转换为十六进制字符串并打印输出:

14400
您找到你想要的搜索结果了吗?
是的
没有找到

URL安全的Base64编码

然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的「/」「+」字符变为形如「%XX」的形式,而这些「%」号在存入数据库时还需要再进行转换,因为ANSI SQL...为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的「+」「/」分别改成了「*」「-」,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加...该编码方式的基本过程是先将内容以Base64格式编码为字符串,然后检查该结果字符串,字符串中的加号+换成中划线-,并且斜杠/换成下划线_。 详细编码规范请参考RFC4648标准中的相关描述。...补充:对于末尾的“=”占位符,Bouncy Castle将之用.代替,而Commons Codes杜绝任何的补位符。下面的示例代码使用了Bouncy Castle的方法,“=”用“.”代替。...用于URL的改进版Base64编码C#实现:        ///        /// 从二进制字符转换为适用于URL的Base64编码字符串        /// < /summary

6.5K101

详解Android端与JavaWeb传输加密(DES+RSA)

一、加密介绍 本文采用对称式加密算法DES非对称式加密算法RSA结合做数据传输加密的方式。...RSA算法基于一个十分简单的数论事实:两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以乘积公开作为加密密钥。...一般推荐的长度就是1024位(128字节) JAVA需要使用的私钥需要经过PKCS#8编码,PHP程序不需要 当前私钥格式需要转换为pkcs#8的格式,命令为: pkcs8 -topk8 -inform...; /** * 公钥 */ private RSAPublicKey publicKey; /** * 字节数据字符串专用集合 */ private static final char[] HEX_CHAR...new Exception("密文长度非法"); } catch (BadPaddingException e) { throw new Exception("密文数据已损坏"); } } /** * 字节数据十六进制字符串

1.2K30

一文读懂 MD5 算法

MD2、MD4、MD5 都产生 16 字节(128 位)的校验值,一般用 32 位十六进制数表示。MD2 的算法较慢但相对安全,MD4 速度很快,但安全性下降,MD5 比 MD4 更安全、速度更快。...下面我们介绍 JDK、Bouncy Castle Guava 的 MD5 使用示例。...为了保证以下示例的正常运行,首先我们需要在 pom.xml 文件中添加 Bouncy Castle Guava 的坐标: org.bouncycastle...Bouncy Castle 实现的示例中使用了 bytesToHexString 方法,该方法用于把字节数组转换成十六进制,它的具体实现如下: private static String bytesToHexString...6.2 密码加盐 盐(Salt),在密码学中,是指在散列之前散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为 “加盐”。

3.5K30

ASN编码方式详解

带小数点的小数形式不能在ASN.1中直接使用,在ASN.1中实数实际定义为三个整数:尾数、基数指数 注释以两个连字符“--”开始,结束于行的结尾或者该行中另一个双连字符。...如同大多数计算机语言,ASN.1不对空格、制表符、换行符注释做翻译。但是在定义符号(或者分配符号Assignment)“::=”中不能有分隔符,否则不能正确处理。...微软的CryptAPI很强大,证书的各种格式都可以识别,比如纯BASE64编码的、标准PEM格式的、非标识PEM格式的(不是64字节换行、没有头尾等)、二进制格式的 BER编码 描述了如何ASN.1...length = 169 转换为 81 A9(169长度超过127,长度域为1000 0001 1010 1001;169是后8位的值,前8位的第一个1表示这是一个长格式的表示方法,前8位的后7位表示后面有多少个字节表示针对的长度...1.2.840.113549.2.5换成字数组 {42, 840, 113549, 2, 5}. 2.然后每个字分割为带有最高位的7位数字,{{0x2A},{0x86,0x48},{0x86,0xF7,0x0D

3.1K30

java jce_了解Java JCE的加密

最后,演示怎么生成密钥密码,及如果进行基本的加密、解密。...最后,演示怎么生成密钥密码,及如果进行基本的加密、解密。 提供者是什么?...提供者是特定加密算法的实现者,有的提供者(提供的加密技术)是免费的,有的不免费,IBM, Bouncy Castle, RSA都是一些(加密)提供者.在本文的后面,我们考察一下来自Bouncy Castle...e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } } } 加解密数据 加密是对字节的...,所有你要首先初时化,让他知道你要干什么: cipher.init(Cipher.ENCRYPT_MODE, key); 这就将初始化Cipher类,以准备好加密数据,.最简单的加密方法及时对传入的字节数组调用

72520

netty系列之:对聊天进行加密

但是因为第一代PKI标准是基于抽象语法符号ASN.1进行编码的,实现起来比较复杂困难,所以产生了第二代PKI标准。...CRTCER基本上是等价的,他们都是证书的扩展,也是文本文件,不同的是CRT通常用在liunxunix系统中,而CER通常用在windows系统中。...看这个类的名字就是知道它是一个自签名的证书类,并且会自动证书文件私钥文件生成在系统的temp文件夹中,所以这个类在生产环境中是不推荐使用的。...默认情况下该类会使用OpenJDK’s X.509来生成证书的私钥,如果不可以,则使用 Bouncy Castle作为替代。...该类中有个fingerprints数组,用来存储安全的授权过的指纹信息。通过对比传入的证书指纹,如果一致则校验通过。

1K00

写给开发人员的实用密码学 - 国密对称加密算法SM4实现要点

本文介绍密码库 libtomcrypt 库中增加 SM4 算法的一些关键点。...论名气,libtomcrypt 远远不及 OpenSSL、NSS、Bouncy Castle 等加密库,不过 libtomcrypt 也有一些优点: 代码采用 C 语言实现,可移植性好 模块化设计,易于裁剪...default_rounds 指的是默认加密的轮次(可以想象为一个轮盘,的次数不同,加密结果就不同)。...因为 SM4 的加密算法与密钥扩展算法都采用 32 轮,所以这里的缺省轮次 setup 函数中的 num_rounds 都不会用到。...SM4 的分组长度是 128 位,也就是一次只处理 16 个字节。在实际应用中,肯定不会只加密 16 个字节的数据,这就涉及到如何分组,如果数据字节数不是 16 的整数倍,还涉及到填充问题。

1.8K10

写给开发人员的实用密码学 - 数字证书

我们可以ASN.1看作一种伪代码,是用来描述证书结构的。 X.509是标准,ASN.1也是标准。...X.509标准定义了证书应该包含的内容,而借助ASN.1标准来描述X.509标准(或者说证书),可以让机器人更好地理解组织X.509标准。...对于Web网站来说,每个网站都有一个域名,证书域名息息相关,早期证书校验方校验证书的时候是URL中的域名证书subject值中的CN比较,如果一致,代表证书校验成功。...证书生成格式 ASN.1标准用于描述证书结构,而证书本质上是一个文件,需要一种专门的格式,才能在互联网中传输,证书需要通过一个规则将ASN.1换为二进制文件。...DER是一个二进制文件,为了方便传输,可以DER转换为PEM(Privacy-enhanced Electronic Mail)格式,PEM是Base64编码方式,以-----BEGINCERTIFICATE

1.2K10

Java正确进行字符串编码转换

;如果源码文件是GBK编码, 操作系统(windows)默认的环境编码为GBK,那么编译时, JVM按照GBK编码字节数组解析成字符,然后字符转换为unicode格式的字节数组,作为内部存储。.... , 编译时,JVM按照utf-8 解析成字符,然后转换为unicode格式的字节数组, 那么不论源码文件是什么格式,同样的字符串,最后得到的unicode字节数组是完全一致的,显示的时候,也是转成GBK...其中 getBytes() 是unicode 转换为操作系统默认的格式的字节数组,即"你好哦"的 GBK格式,new String (bytes, Charset) 中的charset 是指定读取 bytes...如何正确的GBKUTF-8 ? (实际上是unicodeUTF-8) String gbkStr = "你好哦!"...; //源码文件是GBK格式,或者这个字符串是从GBK文件中读取出来的, 转换为string 变成unicode格式 //利用getBytesunicode字符串转成UTF-8格式的字节数组

2K10

有一种密码学专用语言叫做ASN.1

可能很多人没有听说过ASN.1, 但是相信有过跨平台编程经验的同学可能都听过protocol buffersApache Thrift,虽然ASN.1上面两个语言相比不是那么出名,但是ASN.1的出现要比他们早的多...ASN.1是一种和平台、语言无关的描述语言,可以使用很多ASN.1的翻译工具,ASN.1翻译成为C, C++, Java等代码。...一般来说ASN.1中有下面的数据类型: BOOLEAN BOOLEAN编程语言中的布尔值是一致的,它有两个可能得值:TRUEFALSE。...TRUE INTEGER INTEGER表示的是一个整数,如下所示,表示的是一个年例范围是0到100,最终的取值是18: age INTEGER (0..100) ::= 18 BIT STRING 字节的位表示方法...SIZE SIZE可以表示字符串的长度或者数组的长度: Name ::= IA5String (SIZE (4..7)) NameList ::= SEQUENCE SIZE

75920

速读原著-TCPIP(ASN.1BER)

第25章 SNMP: 简单网络管理协议 25.11 ASN.1BER 在正式的S N M P规范中都是采用A S N . 1(Abstract Syntax Notation 1)语法,并且在S N...其他介绍S N M P的书不同,我们有目的地把A S N . 1B E R的讨论放到最后。因为如果放在前面讨论,有可能使读者产生混淆而忽略了S N M P的真正目的是进行网络管理。...在这里我们也只是对这两个概念简单地进行解释, [Rose 1990]的第8章详细讨论了A S N . 1B E R。 A S N . 1是一种描述数据和数据特征的正式语言。...S N M P使用的编码方法是B E R。例如,对于一个简单的整数如 6 4,在B E R中需要用3个字节来表示。...幸运的是,A S N . 1B E R这两个繁琐的概念仅仅在实现 S N M P的时候才重要,对我们理解网络管理的概念流程并没有太大的关系。

88110
领券