代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
SM2用到KDF函数
作者:
梁金堂
/ 发布于
2015/7/9
/
533
本函数 基于 bouncycastle 库, bcprov-jdk15on-152.jar 实现.
/** * SM2椭圆曲线公钥密码算法 (百度文库可以免费下载到) 第90页 示例用到 kdf 函数, * KDF函数说明在SM2椭圆曲线公钥密码算法,第68页,5.4.3 密钥派生函数 * kdf本身是基于bit计算的, * 而实际应用中都是基于字节处理的,所以本函数实现了基于字节处理的kdf函数 * * @param bytes * 输入的字节 * @param len * 输出的密钥扩展数量,单位字节.不应该大于输入的字节数 * @return 返回指定数量的密钥扩展 */ public static byte[] kdf(byte[] bytes, int len) { SM3Digest sm3Digest = new SM3Digest(); int n = bytes.length / 32 + 1; // 不小于分组数量的最小整数,实际实现上可以加+1,因为多余的扩展会被截掉 int couter = 1;// 32bit counter byte[] bs = new byte[32];// Hv output ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); for (int i = 0; i < n; i++) { sm3Digest.reset(); sm3Digest.update(bytes, 0, bytes.length); sm3Digest.update(toBytes(couter++), 0, 4); sm3Digest.doFinal(bs, 0); try { byteArrayOutputStream.write(bs); } catch (IOException e) { } } return Arrays.copyOf(byteArrayOutputStream.toByteArray(), len); } public static byte[] toBytes(int n) { byte[] bs = new byte[4]; bs[0] = (byte) ((n >> 24) & 0xff); bs[1] = (byte) ((n >> 16) & 0xff); bs[2] = (byte) ((n >> 8) & 0xff); bs[3] = (byte) (n & 0xff); return bs; }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
梁金堂
贡献的其它代码
(
3
)
.
SM2用到KDF函数
.
一键卫星定位地图开发
.
带星号隐藏的身份证号码的破解
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3