电子技术应用【电子技术论文方向】

电子技术论文方向

电子技术论文方向 电子技术论文篇一 电子商务安全技术 摘要:今天电子商务安全技术主要指的是交易对象的身份认证,交易 过程的安全。安全技术的基础就是大数运算。例如RSA数字签名算法它的安全性 就是建立在大数计算上,该数字签名算法的数据安全长度为1024位,该长度远远 超过了计算机的字长,所以在处理过程中无法使用单变量直接运算,而必须设计 出相应的算法,实现大数运算。本文给出大数无符号整数四则运算(大数加减乘 除)。

关键词:电子商务 安全技术 四则运算 VB程序源码 中图分类号:TP393.08 文献标识码:A 文章编号:
1007-9416(2013)10-0200-03 1 前言 电子商务安全技术基础就是大数计算。所谓大数指的是超出计算机字 长的一种数值计算方式,例如使用VB设计程序时数据是保存在变量中,使用的 变量分为不同类型,其中包括字节型Byte占用一个字节,整型Integer占用两个字 节,长整型Long占用四个字节,双精度Double占用八个字节。所以使用变量表示 数据或进行数据运算时最大的数据使用Double型占用八个字节共64Bits,如果处 理的数据长度在64Bits以下可以直接使用变量直接进行运算,如果处理的数据长 度超出64Bits,就无法使用变量直接进行运算,而必须设计出相应的算法模型。

2 二进制整型数组 数制是数据表示的一种方式。在生活当中我们通常使用的数制是十进 制,而计算机中使用的是二进制,在程序设计时还可能用到八进制或十六进制。

对同一个数值可以用不同的数制表示方式。

对比不同数制数值的运算,十进制手工计算比较常用,而使用计算机 进行计算时十进制就非常麻烦,解决的办法就是使用二进制数据。在上一篇论文《任意长度数制转换》当中阐述了二进制和十进制之间的转换,其中子程序 Longdtob是将十进制数据转换成二进制数据,子程序Longbtod是将二进制数据转 换成十进制数据。这两个转换子程序是在不同数制字符串之间的转换,但是这种 转换的字符串数据还不能用于计算,为此我们必须对计算用的数据进行如下处 理:
本文设计的算法模型是采用二进制整型数组来保存数据。

数组定义语句为Dim mva(2050) as integer。数组名为mva,数组元素 个数为2050,在此元素的个数就是表示二进制数值数据的长度。如果需要可以增 加元素个数,这样就达到增加处理数据的长度。每一个数组元素值只有1或0两个。

下面是两个转换子程序,一个是二进制字符串转二进制整型数组,另 一个是二进制整型数组转二进制字符串。

(1)二进制字符串转二进制整型数组子程序。

转换子程序定义 Public Sub binstobinv(ByVal vs As String, ByVal sl As Integer, ByRef binv() As Integer, ByRef sst0 As Integer, ByRef sed0 As Integer, ByRef scrt As String) Dim i As Integer, j As Integer sst0 = sed0 - sl + 1 j = sed0 - sst0 + 1 For i = sed0 To sst0 Step -1 binv(i) = Val(Mid(vs, j, 1)) j = j - 1 Next i scrt = "S" End Sub 二进制字符串转二进制整型数组子程序调用:bins =”1101” binl = Len(bins) st0 = 1 ed0 = 2050 Call binstobinv(bins,binl,binv(),st0,ed0,svrt) 子程序运算结果 Binv(2047)=1 Binv(2048)=1 Binv(2049)=0 Binv(2050)=1 st0=2047 ed0=2050 (2)二进制整型数组转二进制字符串子程序。

转换子程序定义 Public Sub binvtobins(ByRef binv() As Integer,ByVal sst0 As Integer, ByVal sed0 As Integer,ByRef vs As String,ByRef vsl As Integer,ByRef scrt As String) Dim i As Integer i = sst0 vs = "" vsl = 0 Do If binv(i) 0 And vsl = 0 Then vsl = sed0 - i + 1End If If binv(i) = 0 And vsl = 0 Then Else If binv(i) = 0 Then vs = vs + "0" Else vs = vs + "1" End If End If i = i + 1 If i sed0 Then Exit Do End If Loop If sst0 = sed0 And binv(sst0) = 0 Then vs = "0" If sst0 = sed0 And binv(sst0) = 1 Then vs = "1" scrt = "S" End Sub 二进制整型数组转二进制字符串子程序调用:
St0=2046 ed0 = 2050 binv(2046)=1 binv(2047)=0 binv(2048)=1 binv(2049)=1 binv(2050)=1Call binvtobins(binv(), st0, ed0, binsv, binlv, svrt) 子程序运算结果 Binsv=”10111” Blnlv=5 用二进制整型数组用来保存任意长度二进制数据,运算的时候也使用 二进制整型数组。

3 无符号整型四则运算 数学中数值的基本运算指的是四则运算,也就是常说的加减乘除运算, 在运算除法时还可以得到一个模。在计算机中进行程序设计时数据运算的复杂程 度不一样,十进制最复杂,而使用二进制最为简便。

(1)加法子程序Longadd。

1101 vad1(2050)被加数 + 110 vad2(2050)加数 10011 vad0(2050)结果和 1100 mc是进位 加法子程序调用:
vad1(2047)=1 被加数 vad1(2048)=1 vad1(2049)=0 vad1(2050)=1 sst1=2047 sed1=2050 vad1(2048)=1 加数vad1(2049)=1 vad1(2050)=0 sst2=2048 sed2=2050 Call longadd(vad1(), sst1, sed1, vad2(), sst2, sed2, vad0(), sst0, sed0, svrt) 运算结果 vad0(2046)=1 和 vad0(2047)=0 vad0(2048)=0 vad0(2049)=1 vad0(2050)=1 sst0=2046 sed0=2050 (2)减法子程序Longsub。

110 mc借位 1101 vad1()被减数 - 110 vad2()减数 111 vad0()结果差 使用此模型时被减数要大于等于减数。

减法计算过程子程序Longsub调用:
vad1(2047)=1 被减数 vad1(2048)=1vad1(2049)=0 vad1(2050)=1 sst1=2047 sed1=2050 vad2(2048)=1 减数 vad2(2049)=1 vad2(2050)=0 sst2=2048 sed2=2050 Call longsub(vad1(),sst1,sed1,vad2(),sst2,sed2,vad0(),sst0, sed0,svrt) 运算结果 Vad0(2048)=1 差 Vad0(2049)=1 Vad0(2050)=1 Sst0=2048 Sed0=2050 (3)乘法子程序Longmul。

1101 vad1(2050)被乘数 x 110 vad2(2050)乘数 0000 smm(2050,2050)中间结果 1101 + 1101 纵向累加得到乘积1001110 vad0(2050)积 在计算乘法时使用一个二进制整型二维数组smm()保存中间结果。在 计算时纵向保存每一个乘数数位乘上被乘数,填写好数据以后从个位向左纵向相 加得到乘法的积。

乘法计算过程子程序Longmul调用:
vad1(2047)=1 被乘数 vad1(2048)=1 vad1(2049)=0 vad1(2050)=1 sst1=2047 sed1=2050 vad2(2048)=1 乘数 vad2(2049)=1 vad2(2050)=0 sst2=2048 sed2=2050 Call longmul(vad1(),sst1,sed1,vad2(),sst2,sed2,vad0(),sst0, sed0,svrt) 运算结果 vad0(2044)=1 积 vad0(2045)=0 vad0(2046)=0 vad0(2047)=1 vad0(2048)=1 vad0(2049)=1vad0(2050)=0 Sst0=2044 Sed0=2050 (4)除法子程序Longdiv。

vads(2050) 商 vad2(2050)除数 1101 vad1(2050)被除数 vady(2050) 余数(模) 除法计算过程:
用vad2()与vad1()逐段进行比较,小于等于时商1,大于时商0(商vads()), vady()在除不尽的时候保存余数(也被称作模)。

除法子程序Longdiv调用:
vad1(2043)=1 被除数 vad1(2044)=1 vad1(2045)=1 vad1(2046)=1 vad1(2047)=0 vad1(2048)=0 vad1(2049)=0 vad1(2050)=1 sst1=2043 sed1=2050 vad2(2047)=1 除数 vad2(2048)=1 vad2(2049)=0vad2(2050)=1 sst2=2047 sed2=2050 Call longdiv(vad1(),sst1,sed1,vad2(),sst2,sed2,vads(), vssts, vseds, vady(), vssty, vsedy, svrt) 运算结果 vads(2046)=1 商 vads(2047)=0 vads(2048)=0 vads(2049)=1 vads(2050)=0 vssts=2046 vseds=2050 vady(2048)=1 余 vady(2049)=1 vady(2050)=1 vssty=2048 vsedy=2050 4 结语 大数运算是通过设计的算法进行加减乘除四则运算,本文设计的算法 是采用二进制整型数组保存长度超出计算机字长的数据。文中数组的长度决定了 处理的二进制数据数值的大小,本文的数组长度是2050个二进制数位,如果需要 可以任意增加数组的长度,只要计算机的内存足够大。目前我们使用的计算机基 本上都能够满足这个要求,四则运算的难点是除法,如果使用十进制非常复杂, 相对来讲二进制相对来讲要容易一些。

当前论文是系列论文的第二篇“任意长度数值无符号整数四则运算”,上一期《数字技术与应用》发表了“任意长度数值数制转换”。后续论文包括第三 篇“任意长度数值有符号整数四则运算”。第四篇“任意长度数值实数四则运算”。

在系列论文全部发表以后欢迎读者向作者索取VB程序源码。希望读者能够继续 关注《数字技术与应用》。