还原 SM2 压缩公钥的几种方法

写这篇文章的起因是朋友让我帮忙解决一个与 SM2 算法加密相关的问题。由于我对 SM2 算法并不熟悉,因此在解决问题的过程中走了很多弯路,花了很多时间去了解 SM2 算法以及如何通过代码还原压缩公钥。随着越来越多的系统采用国密算法,我们在对接的时候难免会遇到类似的问题,网上关于这方面的资料也比较少,因此趁周末有空,将我发现的几种还原压缩公钥的方法记录下来,希望对你有所帮助。 ...

2023-06-19 · 4 分钟 · 1713 字

译|PHP 7 新的 Hashtable 实现

大约三年前,我写了一篇分析 PHP 5 中数组的内存使用情况的文章。即将到来的 PHP 7 作为我工作的一部分,我重点关注于优化数据结构的大小以及内存分配上,为此重写了 Zend 引擎的大部分的内容。在这篇文章中,我将对新的 HashTable 实现进行概述,并说明为什么它比以前的实现更高效。 ...

2022-10-31 · 16 分钟 · 7730 字

排查 ES 查询问题:深入了解 json_encode() 函数

在使用 Elasticsearch 时,有时候会需要通过某个字段批量查询数据,比如通过用户 ID 批量获取用户信息,DSL 语句如下: { "query": { "bool": { "must": [ { "terms": { "user_id": ["123", "456"] } } ] } } } 在 PHP 中,通常会使用数组来构造 DSL 语句,然后调用 json_encode() 函数将数组转成 JSON 字符串。 ...

2022-06-02 · 3 分钟 · 1459 字

PHP 8 新特性介绍

前言 距离 PHP 8 发布已经有一年多了,这个版本是 PHP 语言的主版本更新,包含了很多新功能与优化项,并改进了类型系统、错误处理,目前已经迭代到 PHP 8.0.10 版本。 由于更新的内容较多,本文仅介绍部分特性,完整内容可以去官网进行了解。 ...

2021-09-03 · 5 分钟 · 2025 字

基于 OpenSSL 实现国密 SM4 加解密

if (!in_array('sm4-cbc', openssl_get_cipher_methods())) { printf("不支持 sm4\n"); } $key = 'her-cat.com'; $iv = random_bytes(openssl_cipher_iv_length('sm4-cbc')); $plaintext = '她和她的猫'; $ciphertext = openssl_encrypt($plaintext, 'sm4-cbc', $key, OPENSSL_RAW_DATA , $iv); printf("加密结果: %s\n", bin2hex($ciphertext)); $original_plaintext = openssl_decrypt($ciphertext, 'sm4-cbc', $key, OPENSSL_RAW_DATA , $iv); printf("解密结果: %s\n", $original_plaintext); 运行结果: 加密结果: 45cd787b0a84603ae8fd443b81af4d17 解密结果: 她和她的猫 2023.04.11 更新: 今天收到了一位读者的邮件,他在对接银联支付时遇到了问题,使用 PHP 生成的密文与银联支付提供的 Java 示例生成的密文不一致。 ...

2021-08-23 · 1 分钟 · 371 字