基于 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 字

PHP 源码阅读笔记:编译与调试 PHP

基本信息 PHP 版本:7.1.0 调试环境:Ubuntu(WSL) 调试工具:GDB、Clion 编译 PHP 下载并安装 PHP: $ wget http://cn2.php.net/distributions/php-7.1.0.tar.gz $ tar -xzvf php-7.1.0.tar.gz $ cd php-7.1.0 $ ./configure --prefix=$HOME/php-7.1.0/build --enable-fpm 注意:$HOME/php-7.1.0/build 是 PHP 执行文件和库文件安装的目录,可以自定义。--enable-fpm 表示同时安装 php-fpm。 ...

2021-08-06 · 3 分钟 · 1017 字

基于 GitHub Actions 定时推送网址到百度站长平台

前言 刚学会 PHP 的时候写了一个笑话类型的网站,网站的数据是定时从另外一个网站上采集的。但是网站部署在虚拟主机上,所以用不了 crontab 执行定时任务。 解决办法是使用监控宝,定时请求我网站的一个地址,在这个地址里面编写采集数据的逻辑。到了现在已经有很多解决办法,比如 Workerman/Swoole 的定时器组件、GitHub Actions。 ...

2021-05-17 · 3 分钟 · 1207 字

Workerman 源码分析:文件上传

前言 在 Nginx 中 HTTP 数据是一边接收一边进行解析的,如果解析过程中发现收到的数据有问题就会停止解析,并且停止接收数据。 而 Workerman 将解析协议这一步进行后置,当程序需要用到 HTTP 协议携带的信息时才会解析相应的数据,并把解析结果缓存起来,下次获取信息时就直接从缓存中读取即可,避免多次解析。 ...

2021-05-08 · 3 分钟 · 1244 字

什么是二进制安全

众所周知,C 语言中使用字符数组来表示字符串,并在字符串末尾使用空字符 \0 标识字符串结束。 如果字符串中包含 \0 或者二进制数据,就会导致 strlen 函数获取的长度跟字符串实际的长度不一致。 ...

2021-03-25 · 3 分钟 · 1461 字