密评--SM2加解密手动验算过程

1、SM2可能得考点

密评、能力验证绕不过SM2算法,考试出题基本围绕着SM2算法的随机数来进行,要不就是随机数重复、要不就是随机数简单可以爆破。这里把SM2加解密的过程,全都计算验证出来,仅供参考。

2、解析SM2加密过程

SM2加密流程图

SM2加密数据,就是为了得到C1C2C3

C1=[K]G

C1,随机数K点乘参数G,这个G是已知的G=

32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7

BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0

举个栗子,不符合要求的K值,K=0x05,求C1

有的同学,可能就看见了为什么是“点乘(基于私钥生成公钥)”,因为公钥P=[d]G,这里都是点乘G,所以可以这么算。

C2=M⨁t

M呢,就是明文;t通过X2Y2得到,(x2,y2)=[k]PB,随机数点乘公钥

t=KDF(X2||Y2,Mlen),这里我用Mlen,是因为方便记忆,就是要用到明文的长度hex

3、举个栗子计算验证SM2加密

已知

私钥

B605B0C73EB1FA7C2197547064AFFEE1258793CA62E71EC12DD7BB9AB4CB5AF1

公钥E15FB81C288B99F8A2400E2FCC91A6DC7D4F922B427114A482DF7CE769EA8964B3F38B0F84A04FA4FDD4FF84033920CD273F36819732E209B8A0D2CD6C93ED33

随机数K

0000000000000000000000000000000000000000000000000000000000000005

对数据“好好学习,天天向上”进行收工计算加密,再用工具验证是否正确

C1=[K]G

刚才已经求得了

C1=c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe6480

(x2,y2)=[k]PB

82b4588e5be4f9ff31e09bf3718e28290123f0da5a6e2d977c76763f8aa69a70
c0bc4af860c7f6d1dc8dff26b2c3d288f4787216f8178084aae3530bb6636ff8

t=KDF(X2||Y2,Mlen)

“好好学习 天天向上”16进制,34hex,597d597d5b664e60205929592954114e0a

t=81F8F2BA8EAE2B3A2005BD8536619A6C18

C2=M⨁t

D885ABC7D5C8655A005C94DC1F358B2212

C3=HASH(X2||M||Y2)

SM2加密过程使用的是SM3杂凑计算

68d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794

C1C3C2

把前面得到的C1C3C2拼接起来

c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe648068d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794D885ABC7D5C8655A005C94DC1F358B2212

使用私钥去验证下,是否正确

正确,手动计算成功

小提示,每次使用工具SM2加密都是不一样的结果,是因为工具使用随机的K,导致(X1,Y1),(X2,Y2)不一样

使用工具,使用公钥加密,和我计算的不一样,每点一次都不一样

4、顺带做个解密验证计算

解密过程,引用之前我们计算结果

C1=c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe6480

C2=D885ABC7D5C8655A005C94DC1F358B2212

C3=68d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794

私钥

B605B0C73EB1FA7C2197547064AFFEE1258793CA62E71EC12DD7BB9AB4CB5AF1

(x2,y2)=[d]C1

加密时候,(x2,y2)=KP,这两个计算式子结果值是一样的

解密时候,[d]C1=82b4588e5be4f9ff31e09bf3718e28290123f0da5a6e2d977c76763f8aa69a70
c0bc4af860c7f6d1dc8dff26b2c3d288f4787216f8178084aae3530bb6636ff8

后面计算t是一样的

t=81F8F2BA8EAE2B3A2005BD8536619A6C18

M=C2⨁t

最后,好好学习 天天向上

### 实现 UniApp 中通告栏组件的垂直滚动效果 在 UniApp 开发环境中,为了实现通告栏(通常称为跑马灯或公告栏)的垂直滚动效果,可以通过自定义样式和 JavaScript 动画来完成这一功能。虽然 `uni-ui` 扩展组件提供了丰富的 UI 组件库[^1],但特定于垂直滚动通告栏的功能可能需要开发者自行构建。 #### HTML 结构设计 首先,在页面模板文件中创建一个容器用于放置要滚动的内容: ```html <template> <view class="scroll-container"> <text v-for="(item, index) in notices" :key="index">{{ item }}</text> </view> </template> ``` 这里使用了 Vue 的循环语法 `v-for` 来遍历通知列表并渲染每一项文字内容。 #### CSS 样式设置 接着通过 CSS 定义该容器及其内部元素的基础布局以及动画属性: ```css <style scoped> .scroll-container { height: 40px; /* 设置固定高度 */ overflow: hidden; } .scroll-item { display: block; white-space: nowrap; animation: scroll-up linear infinite; } @keyframes scroll-up { from { transform: translateY(0); } to { transform: translateY(-100%); } } </style> ``` 上述代码片段设置了 `.scroll-container` 的溢出隐藏特性,并给每一个子节点应用了一个名为 `scroll-up` 的关键帧动画,使得这些项目能够向上移动直到完全离开视口范围为止。 #### JavaScript 控制逻辑 最后利用 Vue 或者其他框架提供的生命周期钩子函数初始化数据源和其他必要的配置参数: ```javascript <script> export default { data() { return { notices: [ '欢迎访问我们的网站', '最新活动即将上线,请持续关注!', '感谢您一直以来的支持' ] }; }, mounted() { this.startScroll(); }, methods: { startScroll() { let items = document.querySelectorAll('.scroll-item'); setInterval(() => { Array.prototype.forEach.call(items, (el, i) => { el.style.animationDuration = `${items.length * 2}s`; }); }, 0); } } }; </script> ``` 此部分脚本负责准备显示的消息数组,并调用方法启动自动播放机制。注意这里的定时器是为了确保每次更新 DOM 后重新计算动画时间长度,从而保持流畅度。 综上所述,以上就是关于如何在 UniApp 应用程序里制作具有垂直滚动特性的通告栏的具体实施办法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值