热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

OpenSSL密码库算法笔记——第1.2.1章经典乘法

所谓的经典乘法就是在小学的时候学到的那一套做乘法的方法。如果假设被乘数a和乘数b为:,…………(1.1)则经典乘法是这样做的:。………

所谓的经典乘法就是在小学的时候学到的那一套做乘法的方法。如果假设被乘数a和乘数b为:

,                         …………(1.1)

则经典乘法是这样做的:

                      …………(1.2)

即分别做a×bi,再累加到r上。

算法如下:(参见[1]算法14.12)

───────────────────────────────────────

算法:    经典乘法

step1:   对i从0到(m+n-1),令ri←0。

step2:   对j从0到n-1,执行如下运算:

2.1) c←0。

2.2) 对于i从0到m-1,

2.2.1) 计算 (u,v)= r_{i+j}+a_{i}b_{j}+c

a\times b_{0}       …………(1.3)

这里的h32表示h32比特,h16表示h16比特,其余同理。

说明(2)、(3)可归纳为下表:

函数名称

数学表达式

调用情况

mul         (r, a, bl, bh, c )

a_{j}\times b_{0}

a_{j}\times b_{i}

最底层

表1.2 bn_mulbn_mul_addmul64的比较

关于上述函数与宏定义的关系请参见§1.2.3。

当乘数退化成一个字的时候,可以使用大整数与字的乘法。

───────────────────────────────────────

BN_ULONG bn_mul_word(BIGNUM *a, BN_ULONG w)

功能:    大数与字的乘法

输入:    a【大数】,w【字】

输出:    a←a×w

返回:    1【正常】 or 0【出错】

出处:    bn_word.c

───────────────────────────────────────

注意:这个函数的名称bn_mul_word和前面提到的bn_mul_words(见本小节对经典乘法函数bn_mul_normal的说明(1))很相似,功能也有些相似,都可以看作是做大整数(前者对应BIGNUM *而后者对应BN_ULONG *)与字的乘法。bn_mul_word(a,w)是做大整数与字的乘法a←a×w,而bn_mul_words 主要是被乘法运算调用,作为一个内部子函数来调用,基本上没有作为独立的函数在用。请注意区别。


推荐阅读
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 假设我们拥有一台以概率 \( p \) 生成 0 和以概率 \( q \) 生成 1 的 {0,1} 随机生成器,如何利用这台生成器构建一个能够均匀生成 12 个 0 或 1 的新生成器?解决方案的核心在于设计一种方法,使得新生成器在生成序列时能够保持均匀分布。具体而言,可以通过多次调用原始生成器,并采用适当的组合策略来实现这一目标。例如,可以使用二进制编码和拒绝采样技术,确保最终生成的 12 位序列具有等概率分布。这种方法不仅能够保证生成结果的均匀性,还能够在计算效率上达到较高的水平。 ... [详细]
  • 解题心得:UVA1339(逻辑分析与字符串处理+排序算法)
    解题心得:UVA1339(逻辑分析与字符串处理+排序算法) ... [详细]
  • 将Jar包部署至Linux服务器的详细步骤与注意事项
    将Jar包部署至Linux服务器的详细步骤及注意事项包括:首先使用 `mvn install` 命令进行Jar包的打包构建。接着,需要停止当前正在运行的Jar进程,可以通过 `ps -ef | grep **.jar` 查找对应的进程ID(PID),然后使用 `kill -9 ` 终止该进程。最后,使用 `rm` 命令删除旧的Jar包文件,确保新版本能够顺利部署。在整个过程中,务必确保操作的准确性和安全性,避免对服务器造成不必要的影响。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在本文中,我们将继续探讨排序算法的优化路径。此前,我们已经介绍了简单插入排序及其优化版本——希尔排序。本次,我们将深入研究一种更为高效的算法——快速排序,并针对洛谷平台上的一道题目,探讨如何通过三向切分优化快速排序,以解决时间限制问题。 ... [详细]
  • 【系统架构师精讲】(16):操作系统核心概念——寄存器、内存与缓存机制详解
    在计算机系统架构中,中央处理器(CPU)内部集成了多种高速存储组件,用于临时存储指令、数据和地址。这些组件包括指令寄存器(IR)、程序计数器(PC)和累加器(ACC)。寄存器作为集成电路中的关键存储单元,由触发器构成,具备极高的读写速度,使得数据传输非常迅速。根据功能不同,寄存器可分为基本寄存器和移位寄存器,各自在数据处理中发挥重要作用。此外,寄存器与内存和缓存机制的协同工作,确保了系统的高效运行。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • Codeforces 605C:Freelancer's Dreams —— 凸包算法解析与题解分析 ... [详细]
  • Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战?
    Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战? ... [详细]
  • 摘要:Bitmap图像格式在排序、去重和查找等应用场景中表现出色。其主要优势在于能够显著降低时间和空间复杂度。然而,该格式也存在一些局限性,例如其效率高度依赖于数据的最大值,且仅在数据密集的情况下才能充分发挥优势。此外,Bitmap图像格式不适用于需要存储具体数值的情况。 ... [详细]
  • 题目探讨了在无向图中求解点连通数的问题,具体涉及UVA1660和POJ1966两个经典问题。通过最小割算法的应用,分析了如何高效地确定网络中的关键节点和路径,为电缆电视网络的优化设计提供了理论支持。该研究不仅验证了最小割算法的有效性,还为进一步探索复杂网络的连通性和鲁棒性奠定了基础。 ... [详细]
  • 题目链接: Caninepoetry问题概述:给定一个仅包含小写字母的字符串,允许将任意位置的字符修改为任意其他小写字母。目标是通过最少次数的修改,使字符串中所有长度大于1的子串均满足特定条件。本文详细分析了该问题,并运用思维与贪心算法,提出了一种高效解决方案。通过对字符串的深入解析,我们探讨了如何在最小化修改次数的同时,确保所有子串符合要求。 ... [详细]
  • 本文详细介绍了267 Collections的特性和应用场景。作为Java集合框架中的核心接口,Collection接口是所有单列集合类的顶级接口,涵盖了列表、集合和队列等数据结构。通过具体的应用实例,本文深入解析了Collection接口的各种方法和功能,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 在探讨P1923问题时,我们发现手写的快速排序在最后两个测试用例中出现了超时现象,这在意料之中,因为该题目实际上要求的是时间复杂度为O(n)的算法。进一步研究题解后,发现有选手使用STL中的`nth_element`函数成功通过了所有测试点。本文将详细分析这一现象,并提出相应的优化策略。 ... [详细]
author-avatar
爱与嫉妒咋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有