首先介绍一下sm4 算法

SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述。SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快,优于AES算法。

SM4算法首先将加密信息进行分组,分组后通过异或、S盒变换、移位等操作进行分组明文的拓展。其中使用迭代方法实现铭文拓展,每轮迭代所采用的密钥经过加密类似的流程进行迭代生成,也就是说加密迭代和生成密钥迭代是对应的。因此,解密过程也能够通过密钥进行密文的迭代解密。

kbcrypto 插件

kbcrypto 是 KingbaseES 的一个扩展插件,可以提供如 rc4,sm3,sm4 等加密函数的访问,可以提供明文的加密打 印输出到前端

KingbaseES 数据库默认将它添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。默认是已存在。

插件 kbcrypto 的使用方法

-- 创建插件

\c test system create extension kbcrypto ;

CREATE EXTENSION

相关函数含义

rc4、sm3、sm4 三个函数入参都是三个

分别是

参数1、加解密文本

参数2、密钥

参数3、加解密标识 其中0 代表加密 1 代表解密

sm4_ex() 函数却别与rc4 、sm3、sm4 包含四个入参

参数1、加解密文本

参数2、密钥

参数3、加解密标识 其中0 代表加密 1 代表解密

参数4、填充模式。

1)填充模式选1, 数据按16字节倍数强制填充,缺m个字节则填充m个字节的m值(m最大值为16)。

2)填充模式选0,数据按16字节倍数非强制填充0x0, 同sm4。

函数使用示例

-- 1. sm3()函数

select sm3('123456abcdef');

-- 2. sm4()函数/rc4()函数

-- 加密:

select sm4('123456abcdef','0123456789ABCDEF',0);

select rc4('123456abcdef','0123456789ABCDEF',0);

-- 解密

select sm4(sm4('123456abcdef','0123456789ABCDEF',0), '0123456789ABCDEF',1);

select rc4(rc4('123456abcdef','0123456789ABCDEF',0), '0123456789ABCDEF',1);

-- 3. sm4_ex()函数(rc4函数没有ex函数扩展)

-- 1)填充模式选1

-- 加密:

select sm4_ex('123456abcdef','0123456789ABCDEF',0,1);

-- 解密

select sm4_ex(sm4_ex('123456abcdef','0123456789ABCDEF',0,1), '0123456789ABCDEF',1,1);

-- 2) 填充模式选0

-- 加密

select sm4_ex('123456abcdef','0123456789ABCDEF',0,0);

-- 解密

select sm4_ex(sm4_ex('123456abcdef','0123456789ABCDEF',0,0), '0123456789ABCDEF',1,0);

注意事项:

加解密函数的返回是二进制,所以不同bytes 格式返回的结果显示存在差异

可以通过调整参数set bytea_output to escape; 来进行设置。默认值时hex

hex:

"hex"格式将二进制数据编码为每字节2位十六进制数字, 最重要的四位(半字节)放在开始。整条字符串以\x开始 (与转义格式相区别)

escape:

"escape"格式是一种传统的 PostgreSQL格式。它采用以ASCII字符序列来表示二进制串的方法, 同时将那些无法表示成ASCII字符的二进制串转换成特殊的转义序列

金仓数据库kbcrypto 插件实现sm加密算法的更多相关文章

  1. 通过ODBC接口访问人大金仓数据库

      国产化软件和国产化芯片的窘境一样,一方面市场已经存在性能优越的同类软件,成本很低,但小众的国产化软件不仅需要高价买入版权,并且软件开发维护成本高:另一方面,国产软件目前普遍难用,性能不稳定,Bug ...

  2. QT 之 ODBC连接人大金仓数据库

    QT 之 使用 ODBC 驱动连接人大金仓数据库 获取数据库驱动和依赖动态库 此操作可在人大金仓官网下载与系统匹配的接口动态库,或者从架构数据库的源码中获取驱动和依赖动态库 分别为: 驱动动态库:kd ...

  3. 通过jmeter连接人大金仓数据库

    某项目用的人大金仓数据库,做性能测试,需要用jmeter来连接数据库处理一批数据.jmeter连接人大金仓,做个记录. 1. 概要 在"配置元件"中添加"JDBC Con ...

  4. linux安装国产数据库(金仓数据库,达梦数据库,南大通用数据库)

    今天在公司做的任务是,在Linux的环境下安装三种数据库,结果一种数据库也没有安装好,首先遇到的问题是安装南大通用数据库遇到安装的第五步,就出现问题了,问题是Gbase SDK没有安装成功,以及Gba ...

  5. Rocky4.2下安装金仓v7数据库(KingbaseES)

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 jdbh:~ # uname -ra Linux jdbh -x86_64 # SMP Fri Dec :: CST x86_64 G ...

  6. 润乾配置连接kingbase(金仓)数据库

     问题背景 客户根据项目的不同,使用润乾连接的数据库类型各种各样,此文针对前几日使用润乾设计器连接kingbase金仓数据库做一个说明. kingbase金仓数据库是一款国产数据库,操作方式和配置 ...

  7. 金仓Kingbase数据库网页数据维护分析工具

    金仓Kingbase是优秀的国产数据库产品,在能源,政务,国防等领域广泛使用, 现在TreeSoft数据库管理系统已支持Kingbase了,直接在浏览器中就可以操作查看Kingbase数据了,十分方便 ...

  8. DBeaver连接达梦|虚谷|人大金仓等国产数据库

    前言 工作中有些项目可能会接触到「达梦.虚谷.人大金仓」等国产数据库,但通常这些数据库自带的连接工具使用并不方便,所以这篇文章记录一下 DBeaver 连接国产数据库的通用模版,下文以达梦为例(其他国 ...

  9. 教你10分钟对接人大金仓EF Core 6.x

    前言 目前.NET Core中据我了解到除了官方的EF Core外,还用的比较多的ORM框架(恕我孤陋寡闻哈,可能还有别的)有FreeSql.SqlSugar(排名不分先后).FreeSql和SqlS ...

  10. Ocelot简易教程(七)之配置文件数据库存储插件源码解析

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...

随机推荐

  1. Laravel入坑指南(5)——请求与响应

    作为互联网典型的Web应用,接收用户请求的数据,并将处理的结果向用户进行响应,是最基础也是最必备的功能.在原生的PHP中,我们常用$_POST.$_GET.$_REQUEST和$_FILES对不同的请 ...

  2. mysqlGTID主从同步出现1236错误问题

    从主库xtrabackup备份,配置好gtid复制,从主库的从库复制.一直报错误 Last_IO_Error: Got fatal error 1236 from master when readin ...

  3. 24个javascript最佳实践

    1. 使用 === 代替 == JavaScript utilizes two different kinds of equality operators: === | !== and == | != ...

  4. 解决linux下zip文件解压后中文乱码问题

    最近项目上碰到在windows上压缩了一些图片,图片文件名称都是中文的,scp到linux下用unzip解压后文件名 全是乱码,找了半天解决方案,下面这个亲测可行,特记录一下,与大家分享: 原因: 由 ...

  5. 学习go语言编程之函数

    函数定义 函数的基本组成:关键字func,函数名,参数列表,返回值,函数体,返回语句. 示例如下: func Add(a int, b int) (ret int, err error) { if a ...

  6. Redis居然还有比RDB和AOF更强大的持久化方式?

    https://cloud.tencent.com/developer/article/1786055

  7. 【LeetCode栈与队列#04】逆波兰表达式求值(仍然是经典的栈操作)

    逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法,求表达式的值. 有效的运算符包括 + , - , * , / .每个运算对象可以是整数,也可以是另一个逆波兰表达 ...

  8. 【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this operation.)

    问题描述 需要 App Service 访问开启防火墙的存储账号.存储账号中设置为允许选中的VNET访问,同时允许了信任的Azure服务的访问,但是仍然报错 "403 (This reque ...

  9. C++函数模板总结:

    //C++提高编程 模板(泛型编程 STL)//模板不可以直接使用 它只是一个框架//模板的通用并不是万能的//语法//template<typename T>//函数模板两种方式//1. ...

  10. 用Python编写自己的微型Redis

    building-a-simple-redis-server-with-python 前几天我想到,写一个简单的东西会很整洁 雷迪斯-像数据库服务器.虽然我有很多 WSGI应用程序的经验,数据库服务器 ...