one-sm

PHP 国密算法库
授权协议 Apache
开发语言 PHP
所属分类 程序开发、 加密/解密软件包
软件类型 开源软件
地区 国产
投 递 者 杜绍元
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

这是一个PHP国密算法库,支持:

  • sm3
    • 字符串签名
    • 文件签名
  • sm4
    • ecb
    • cbc

安装

composer require lizhichao/one-sm

SM3签名

<?php
require __DIR__ . '/vendor/autoload.php';

$sm3 = new \OneSm\Sm3();

// 字符串签名
echo $sm3->sign('abc') . PHP_EOL;
echo $sm3->sign(str_repeat("adfas哈哈哈", 100)) . PHP_EOL;


// 文件签名
echo $sm3->signFile(__FILE__) . PHP_EOL;

性能测试

和 openssl , SM3-PHP 性能测试

php bench.php

结果

openssl:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067
one-sm3:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067
SM3-PHP:4901d7181a1024b8c0f59b8d3c5c6d96b4b707ad10e8ebc8ece5dc49364a3067
openssl time:6.3741207122803ms
one-sm3 time:8.1770420074463ms
SM3-PHP time:1738.5928630829ms

测试代码bench.php

SM4加密

<?php
use OneSm\Sm4;
require __DIR__ . '/vendor/autoload.php';

$data = str_repeat('阿斯顿发到付eeee', 160);
$str_len = strlen($data);

// md5 签名
$sign = md5($data);

// 加密key必须为16位
$key = hex2bin(md5(1));
$sm4 = new Sm4($key);

// ECB加密
$d = $sm4->enDataEcb($data);
// 加密后的长度和原数据长度一致
var_dump(strlen($d) === $str_len);

// ECB解密
$d = $sm4->deDataEcb($d);
// 解密后和原数据相等
var_dump(md5($d) === $sign);


// 初始化向量16位
$iv = hex2bin(md5(2));
// CBC加密
$d = $sm4->enDataCbc($data, $iv);
// 加密后的长度和原数据长度一致
var_dump(strlen($d)===$str_len);

// CBC解密
$d = $sm4->deDataCbc($d, $iv);
// 解密后和原数据相等
var_dump(md5($d)===$sign);
  • php国密SM3签名算法 代码地址 github.com/lizhichao/sm 安装composer require lizhichao/one-sm 使用require __DIR__ . '/vendor/autoload.php'; // 字符串签名 echo \OneSm\Sm3::sign('abc') . PHP_EOL; echo \OneSm\Sm3::sign(str_rep

  • <one-to-one name="iUser" constrained="true"></one-to-one> 就是 这个类的 主键参考了 IUser类,这里iuser实施外键。例如,icard 完全参考了 iuser,作为外键和主键。constrained是约束 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC

  • 记录一下对一些稍大文件进行SM4加解密的实现,这里只列出了核心代码,其他不涉及的代码或者有任何疑问可以查看我之前写的密码技术专题博客 var key = []byte("1234567812345678") var iv = []byte("1111111122222222") /* 函数名: paddingLastGroup 对 CBC 加密模式的加密算法提供最后一个分块的明文数据填充 参

  • java.security.InvalidKeyException: no IV set when one expected at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineInit(Unknown Source) ~[bcprov-jdk15on-1.70.jar:1.70.0] at java

 相关资料
  • 介绍 Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。 国密算法工具封装包括: 非对称加密和签名:SM2 摘要签名算法:SM3 对称加密:SM4 国密算法需要引入Bouncy Castle库的依赖。 使用 引入Bouncy Castle依赖 <dependency> <groupId>org.bouncycastle</groupId>

  • MD5 加密算法 类型:MD5 可配置属性:无 AES 加密算法 类型:AES 可配置属性: 名称 数据类型 说明 aes-key-value String AES 使用的 KEY RC4 加密算法 类型:RC4 可配置属性: 名称 数据类型 说明 rc4-key-value String RC4 使用的 KEY

  • 英特尔证实HDCP(高频宽数字内容保护)主密钥已经泄漏,现在研究人员在BSD许可证下发布了HDCP加密/解密算法的开源实现。他们表示公布软件的目的是帮助其他人研究或实现HDCP协议。 主密钥: 6692d179032205 b4116a96425a7f ecc2ef51af1740 959d3b6d07bce4 fa9f2af29814d9 82592e77a204a8 146a6970e3c4a

  • 本文向大家介绍php用户密码加密算法分析【Discuz加密算法】,包括了php用户密码加密算法分析【Discuz加密算法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php用户密码加密算法。分享给大家供大家参考,具体如下: 今天在拿Discuz进行二次开发时需要在代码里验证Discuz的用户名密码,结果不小心掉进了坑里,因为Discuz的论坛有两张表来存储用户数据,一张在Discuz的

  • 加解密算法 算法类型 特点 优势 缺陷 代表算法 对称加密 加解密密钥相同或可推算 计算效率高,加密强度高 需提前共享密钥;易泄露 DES、3DES、AES、IDEA 非对称加密 加解密密钥不相关 无需提前共享密钥 计算效率低,仍存在中间人攻击可能 RSA、ElGamal、椭圆曲线系列算法 算法体系 现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般

  • 说明:DES加密/解密类仅供参考思路,需要接入方具体实现细节及调通 php版DES加密/解密类: <?php /** * Created by PhpStorm. * User: didi * Date: 2017/9/27 * Time: 16:11 */ namespace Library; class DESHelper { //私钥,固定字节长度为8位 priv

  • 机器学习,电话面试45分钟 投了这么多阿里系总算有个面试 纯自学,研究与机器学习不相关,没论文。实习的时候算法一个都没给面试,那时候没算法的竞赛(只有华为杯国一),只有华子和宁德给面试了,华子一志愿算法没泡出来,被捞到通软,8月开始实习,5-8月狂打了5个算法的比赛,有个kaggle金牌,还有个进线下决赛了(运筹类的算法) 竞赛任务驱动学习,数据挖掘,运筹,图像分类,分割,只要比赛涉及都去接触了,

  • one-to-one关联类似于many-to-one关联,不同之处在于该列将被设置为唯一。 例如,地址对象可以与单个员工对象相关联。 定义RDBMS表 (Define RDBMS Tables) 考虑一种情况,我们需要将员工记录存储在EMPLOYEE表中,该表具有以下结构 - create table EMPLOYEE ( id INT NOT NULL auto_increment,