一种椭圆曲线参数生成的快速算法

一种椭圆曲线参数生成的快速算法
一种椭圆曲线参数生成的快速算法

一种椭圆曲线参数生成的快速算法

谷勇浩 刘勇

(北京邮电大学通信网络综合技术研究所)

摘要:椭圆曲线密码体制是公钥密码中的研究热点。该文介绍了椭圆曲线密码体制的基本概念及相关知识,讨论了目前基于离散对数问题的椭圆曲线密码的研究动态。本文的创新点是针对目前椭圆曲线研究重点之一——椭圆曲线参数生成算法,给出了一种生成参数a 、b 的快速算法。这种算法利用了Jacobi 符号和二次剩余的理论,并且用matlab 计算出利用这种算法生成一个椭圆曲线的平均时间,最后我们分析了今后椭圆曲线密码系统的研究方向和重点。

关键词:椭圆曲线;离散对数问题;Jacobi 符号;二次剩余;阶

1976年Diffie 和Hellman 提出公钥密码思想以来,国际上提出了许多种公钥密码体制的实现方案。一些已经被攻破,一些被证明是不可行的。目前,只有3类公钥密码体制被认为是安全有效的,按照其所依据的数学难题划分为:基于大整数分解问题(IFP ),如RSA 体制和Rabin 体制;基于有限域离散对数问题(DLP ),如Diffie-Hellman 体制和ElGamal 体制;基于椭圆曲线离散对数问题(ECDLP ),如椭圆密码体制。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller 在1985年分别独立提出的。它是目前已知的公钥体制中,对每一比特所提供加密强度最高的一种体制。它具有安全性高、密钥量小、灵活性好的特点,受到了国际上的广泛关注。而SET(Secure Electronic Transaction)协议的制定者已把它作为下一代SET 协议中缺省的公钥密码算法。深入研究基于椭圆曲线离散对数问题的公钥密码具有很大的现实意义。

1建立椭圆曲线公钥密码体制

1.1椭圆曲线域的参数

在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线。在 IEEE P1363标准中,定义其参数为一个七元组:T=(q,FR,a,b,G,n,h),其中q 代表有限域GF(q),q 为素数或

2

m

;FR 为域表示法,如f(x)为

2

m

F 域元素的不可约多项式的表示法;曲线的方程,当q 为素数

时,方程为

2

3

ax b y

x =++,当q 为2m

时,方程为2

3

2

xy a b y x x +=++,a,b 是方程中的系数;G

为基点;n 为大素数并且等于点G 的阶,h 是小整数称为余因子且#()/q

h E n F

=。主要的安全性参数是

n ,因此ECC 密钥的长度就定义为n 的长度。

1.2椭圆曲线密码的密钥

选取了基域

q

F

和椭圆曲线后,得到了在有限域

q

F

上的曲线E 确定的具体形式,即上述的椭圆曲线

域参数的一个七元组。每个用户选取一个整数d(1≤d ≤n-1) 作为其私钥,而以点Q=dG(G 为基点)作其公钥,这样形成一个椭圆曲线公钥密码系统。在这个密码体制中,具体的曲线,基域q

F

,基点G 及其阶n ,

以及每个用户的公钥都是该系统的公开参数,每个用户的私钥是保密的。

1.3基于椭圆曲线密码体制的加解密

假设用户A 欲将明文m 加密后发送给B ,A 执行以下操作: (1)查找B 的公钥(E(

q

F

,G ,n ,

B

Q

));

(2)将m 表示成一个域元素,即q

m F

(3)在区间[1,n-1]内选取一个随机数k ;

(4)计算点1

1

(

,)kG y x =;

(5)依据B 的公钥计算点22

(,)B

k Q

y x =,若2x =0,则返回到第(3)步;

(6)计算2

C m x

=?

(7)传送加密数据1

1

(,,)C y x 给B 。

B 收到A 的密文1

1

(,,)C y x 后,执行以下操作。

(1)使用私钥

B

d

,计算点121

2

(,)(,)B y y d x x =,再计算q F 中1

2()x -;

(2)计算m=C

1

2()

x -,得到明文m 。

2 椭圆曲线密码的研究动态

2.1椭圆曲线密码的安全性

ECC 的安全性是建立在离散对数问题计算难度基础之上,如果离散对数可以计算,从一个用户的公钥

就可得到他的私钥,ECC 就不安全了。对于一般的ECDLP ,目前有两种较好的求解法[1]:Pohlig-Hellman 方法和Pollard-ρ方法。但是对于两类特殊的椭圆曲线,已经有了其他有效的求解方法。一类特殊的椭圆曲线——超奇异椭圆曲线[2](设

q

F

的特征为p ,

/q

E F

的q 阶Frobenius 变换的迹t 是p 的倍数时,E

称为超奇异的),采用概率亚指数算法——MOV 算法和FR 算法可以解决ECDLP 。另一类特殊椭圆曲线是异常(anomalous)椭圆曲线[2](设m

q p

=

,p ≠2,3为素数,

/q

E F

由方程2

3

ax b y

x =++定义,

()q P E F ∈的阶为p 。

当p=q 时,异常曲线上的p 阶Frobenius 变换的迹t=1),SSSA 算法可以解决ECDLP 。 2.2 椭圆曲线的选取

要保证椭圆曲线密码的安全性,就是要使所选取的曲线能抵抗上述的关于ECDLP 解决的方法和算法,所以选取一条安全的椭圆曲线,是一个深刻的数学难题,在此,仅提供几点椭圆曲线选取的安全准则[3]:

(1)为了抗击Pollard-ρ攻击,所选取EC 的阶#E(GF(q))的分解式中应该包含一个大的素数因子,目前应不小于160bit ;

(2)为了抗击Weil 对和Tate 对的攻击,对于1≤k ≤30,n 不能除

1k

q

-(不宜选取超奇异椭圆曲线)

; (3)为了抗击Semaev-Smart-Satoh-Araki 的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(

q

F

)≠q (不宜选取异常椭圆曲线);

(4)对于二进制域GF(

2

m

)的度m 不宜为合数。Gaudry ,Hess 和Smart 提出,若m 有小约数l (l=4),

存在比Pollard's rho 算法更快求解ECDLP 的方法。

下面介绍3种选择适宜的椭圆曲线的方法: (1)仅限于有限域为

2

m

F 上构造椭圆曲线。其原理是将定义在特征值比较小的有限域的椭圆曲线提升到

该域的扩域上去,并且m 能被小整数k ≥1整除。这种方法简单,但是得到的曲线较少。

(2)CM(Complex Multiplication)法,根据给定的阶来选取符合此阶的椭圆曲线。它的实现速度相对较快,

但这种方法产生的椭圆曲线具有附带的结构特征。从安全性角度讲,这是一个潜在的威胁。 (3)随机选取曲线。随机选取曲线的参数a,b ∈

q

F

如果q 是素数,则满足3

2

4270a

b +≠;如果q=2m ,

则b ≠0,然后计算u=#E(Fq)和大素数因子n ,直到所选曲线满足安全需求。这种方法比较理想,选取的曲

线安全级别高,它完全依赖于椭圆曲线阶的计算。

2.3椭圆曲线阶的计算

从上述椭圆曲线的安全性来看,如果曲线的阶充分大,平方根攻击如Shanks's baby-step gaint-step 或Pollard's ρ方法就不太有效,要能抗击Pohlig-hellman 攻击,一个好的策略是确保曲线的阶#E(Fq)中包含

有大素数因子(该大素数作为所选取基点P 的阶)使得P,Pohlig-hellman 算法的O 计算量不能实现。由此看来,计算#E(Fq)是研究定义在有限域上的椭圆曲线的一个核心问题。

对于#E(Fq)的计算是一个纯粹的数学问题。目前有两种方法可以采用: (1)随机选取一条定义于有限域

q

F

的椭圆曲线,直接计算该曲线的阶,使其满足#E(Fq)中包含有大

素数因子。在这方面,R. School 做了开创性的工作,提出了著名的School 算法,后经Atkin 和Elkies 的改进,提出了SEA(School Elkies Atkin)算法。后来,Morain,Lercier 等人又对它作了一些优化,如今SEA 算法已成为计算椭圆曲线阶的有效算法。另外,Satoh 也提出了比较有效的算法及目前对于二进制域效率较高的Satoh-FGH 算法。 (2)仅限于有限域为2

m

F 且它要求所定义的

2

m

F 有限域中的m 能分解为m=de ,其中d 为一个小整

数,通过计算子域

2

d

F 上的#E(

2

d

F ),从而计算出#E(

2

de

F )。这种方法简单易实现,但是适用范围较

小,不能计算出任意m 或固定m 的#E(

2

d

F )。

2.4 椭圆曲线的快速算法

在椭圆曲线密码体制应用中的大量运算是倍乘(数乘),就是一串点的加法运算,即计算k*P=P+P+?+P 共有k 个P 相加。椭圆曲线密码快速实现的关键就是快速实现kP 的运算(包括算法优化和程序优化、软件实现和硬件实现)。其中kP 的运算主要基于两方面的运算:基域上域元素和曲线上点的运算。这些运算与我们所选取的有限域、采用的坐标系、基域中的元素表示方法、选取怎样的椭圆曲线和计算kP 的方法有关。因为同一基域中的元素表示方法不一样(如

2

m

F 中有多项式和通项表示法);不同的坐标系(如仿

射坐标和射影坐标)下,都会影响kP 的计算量。对于一些特殊的曲线,如Koblitz curves ,已经有了较好

的算法,但是对一般随机的椭圆曲线,如何快速计算kP 仍是一个需要研究的问题。

3 椭圆曲线参数快速生成算法

3.1产生椭圆曲线的传统算法

通常情况下,从特定秩生成曲线组中随机选取一个作为椭圆曲线。下面的算法生成基于GF(p)域的椭圆曲线参数,而且能够生成足够的信息能使其他人验证这样的曲线的确是随机生成的。

选定如下参数[4]

素数模p ;基点秩的上下界

max

r

和min

r

;输出长为B 比特的Hash 函数H ,其中min 2

1()2log B r ??

≥????

;以及Hash 函数的输入比特长L ,L B ≥。

还要使用如下的符号:

v = 2

log p ?

???;s = (1)v B -?????

?;w = v -Bs -1

算法输入:p ,

min

r

max

r

max

l

(用于测试的除数的上限,满足

max

l

<

min

r

);

算法输出:比特串X ;EC 参数q=p ,a ,b ,r ,G

(1) 选择长为L 的比特串X ; (2) 计算h=H(X);

(3) 选取h 的最右面的w 比特串计为0

W

(4) 将字符串X 转换为整数z ; (5) I 从1到s ,作如下循环

(5.1)将整数(z+i)mod(2

L

)转化为长为L 的比特串

i

X

(5.2)计算

i

W

=H(

i

X

);

(6) 将所有的

i

W

以如下形式合并成W :

01||||...||s W W W W =

|| 代表连接

(7) 将长对为v-1的字符串W 转换为整数c ; (8) 如果c=0或4c+27≡0(mod p)则返回到(1); (9) 选择整数a ,b ∈GF(p),满足2

3

(mod )c

p b

a ≡;

(最简单的方式是选择a=c ,b=c 。但是,出于性能的考虑,我们要选择其他的a,b )

(10) 给定基于GF(p)的椭圆曲线E :

2

3

ax b y

x =++,计算它的秩u ;

(11) 测试u 的素性概率;

(12) 如果u 几乎不可能是素数,则返回(1);否则通过 ?? 的输出中含有k ,r ; (13) 生成秩为r 的曲线E 上的点G ; (14) 输出X ,a ,b ,r ,G 。

3.2 改进的a 、b 生成算法

为了计算(9)中2

3

(mod )c

p b

a ≡,已经有很多中算法(例如,进化算法)

,但是生成参数a ,b 仍然需要花费很长时间。根据IEEE 1363中介绍的方法生成椭圆曲线参数的时间大约为15s ,所以,生成一

个椭圆曲线需要的时间仍然是一个有待解决的问题。

为了解决椭圆曲线生成时间上的问题,本文将介绍一种新的方案,来解决2

3

(mod )c

p b

a ≡计算上的

问题。这种方法是基于雅可比符号(Jacobi Symbol )和二次剩余(Quadratic Residue )理论。算法步骤如下: (1) 选定一个迭代数;

(2) 随机生成参数c (长度为256比特); (3) 生成向量M (a ,b ,f ),其中a (长度为256比特)是随机的,b=0,f 为一个大整数; (4) 处理向量M 的过程:

(4.1)计算

1

c

-(mod p );

(4.2)计算(

1

c

-(mod p )?

3

a

)mod p = h ;

(4.3)计算Jacobi 符号()h p

(4.4)如果()h p =1,则

2

mod h p b

≡;

(4.5)如果()h p

≠1,则随机生成新的a (长度为256比特),返回(4.1);

(5) 计算f = 2

3

(mod )(mod )c p p b a ?

-;如果f = 0,则向量(a ,b ,c )就是生成的结果;

(6) 返回(4),知道向量M 中所有的EC 都处理完;

(7) 随机生成新的c (长度为256比特),返回(3)。

以上算法通过Matlab 运算,有如下结果:

有了这种算法,可以加快a 、b 的生成,再结合参考文献4中介绍的其他参数的生成算法,就可以快速生成安全而且有效的椭圆曲线,并且可以把它用于生成抗攻击的密码系统中。

4 结束语

椭圆曲线密码是一种能适应未来通信技术和信息安全技术发展的新型密码体制,它在运算速度和存储空间方面占有很大的优势,目前它已成为公钥密码体制中的研究热点。实际上椭圆曲线密码算法还有几个地方有待完算,今后主要的研究方向有3个方面[5]: (1) 如何快速选取安全性高的椭圆曲线。

(2) 如何有效计算椭圆曲线的阶。因为选取安全椭圆曲线的核心步骤是对椭圆曲线阶的计算,对计

算椭圆曲线阶的有效算法的研究也是实现安全椭圆曲线密码体制的一个极其重要的环节。

(3) 在椭圆曲线密码体制中,椭圆曲线群上点的倍乘占了整个运算的很大比例,它的效率关系到整

个体制的执行效率。对椭圆曲线中的kP 倍乘计算仍需研究一种高效快速的方法。

参考文献

[1] 李学俊,敬忠良等. 基于椭圆曲线离散对数问题的公钥密码. 计算机工程与应用. 2002,38(6):20-22. [2] 斐定一,祝跃飞. 算法数论. 北京:科学出版社,2002.

[3] Lopez J, Dahab R. An Overview of Elliptic Curve Cryptography. Technical Report, Institute of Computing, State University of Campinas, Brazil, 2000-05-22.

[4] IEEE Std 1363-2000: IEEE Standard Specifications for Public-Key Cryptography. 2000.1.30. P146-147. [5] 张雁,林英,郝林. 椭圆曲线公钥密码体制的研究热点综述. 计算机工程 第30卷 第3期 2004.2.

作者简介

谷勇浩男,1980年8月生于山西省太原市,2002年7月获得杭州电子科技大学(原杭州电子工业学院)计算机科学与技术学士学位。目前正在攻读北京邮电大学通信与信息工程博士学位。主要研究方向:入侵检测、风险评估、密码学。

刘勇男,教授,博士生导师。研究方向:下一代无线通信技术、网络及信息安全。

常见OTDR测试曲线解析

常见OTDR测试曲线解析 一、正常曲线 一般为正常曲线图, A 为盲区, B 为测试末端反射峰。测试曲线为倾斜的,随着距离的曾长,总损耗会越来越大。用总损耗( dB )除以总距离( Km)就是该段纤芯的平均损耗( dB/Km )。 二、光纤存在跳接点 中间多了一个反射峰,因为很有可能中间是一个跳接点,现城域网光缆中,比较常见。如:现主干光缆由汇接局至光缆交接箱,当有需求时,需由光交接箱布放光缆至用户端,光交接箱就需跳纤联接,所以在测试这样的纤芯时,就会出现像图中这样的曲线图。当然也会有例外的情况,总之,能够出现反

射峰,很多情况是因为末端的光纤端面是平整光滑的。端面越平整,反射峰越高。例如在一次中断割接当中,当光缆砍断以后,测试的曲线应该如光路存在断点图所示,但当你再测试时,在原来的断点位置出现反射峰的话,那说明现场的抢修人员很有可能已经把该纤芯的端面做好了。 三、异常情况 出现图中这种情况,有可能是仪表的尾纤没有插好,或者光脉冲根本打不出去,再有就是断点位置比较进,所使用的距离、脉冲设置又比较大,看起来就像光没有打出去一样。出现这种情况,1、要检查尾纤连接情况; 2、就是把OTD R的设置改一下,把距离、脉冲调到最小,如果还是这种情况的话,可以判断: 1、尾纤有问题;2、OTDR 上的识配器问题; 3、断点十分近,OTDR不足以测试出距离来。如果是尾纤问题,只要换一根尾纤就知道,不行的话就要试着擦洗识配器,或就近查看纤芯了。 四、非反射事件

1、这种情况比较多见,曲线中间出现一个明显的台阶,多数为该纤芯打折,弯曲过小,受到外界损伤等因素,多为故障点。 2、若光纤模式、折射率不一样,接续时也会出现此情况,常见光纤G651光纤(标准单模光纤,B1光缆),G653光纤(色散位移光纤,B2光缆)。造成这种现象的原因是由于接头两侧光纤的背向散射系数不一样,接头后光纤背向散射系数大于前段光纤背向散射系数,而从另一端测则情况正好相反,折射率不同也有可能产生增益现象。所以要想避免这种情况,只要用双向测试法就可以了。 五、光纤存在断点 这种情况一定要引起注意!曲线在末端没有任何反射峰就掉下去了,分析:1如果知道纤芯原来的距离,1、在没有到达纤

一种椭圆曲线快速生成算法

一种椭圆曲线参数生成的快速算法 谷勇浩 刘勇 (北京邮电大学通信网络综合技术研究所) 摘要:椭圆曲线密码体制是公钥密码中的研究热点。该文介绍了椭圆曲线密码体制的基本概念及相关知识,讨论了目前基于离散对数问题的椭圆曲线密码的研究动态。本文的创新点是针对目前椭圆曲线研究重点之一——椭圆曲线参数生成算法,给出了一种生成参数a 、b 的快速算法。这种算法利用了Jacobi 符号和二次剩余的理论,并且用matlab 计算出利用这种算法生成一个椭圆曲线的平均时间,最后我们分析了今后椭圆曲线密码系统的研究方向和重点。 关键词:椭圆曲线;离散对数问题;Jacobi 符号;二次剩余;阶 1976年Diffie 和Hellman 提出公钥密码思想以来,国际上提出了许多种公钥密码体制的实现方案。一些已经被攻破,一些被证明是不可行的。目前,只有3类公钥密码体制被认为是安全有效的,按照其所依据的数学难题划分为:基于大整数分解问题(IFP ),如RSA 体制和Rabin 体制;基于有限域离散对数问题(DLP ),如Diffie-Hellman 体制和ElGamal 体制;基于椭圆曲线离散对数问题(ECDLP ),如椭圆密码体制。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller 在1985年分别独立提出的。它是目前已知的公钥体制中,对每一比特所提供加密强度最高的一种体制。它具有安全性高、密钥量小、灵活性好的特点,受到了国际上的广泛关注。而SET(Secure Electronic Transaction)协议的制定者已把它作为下一代SET 协议中缺省的公钥密码算法。深入研究基于椭圆曲线离散对数问题的公钥密码具有很大的现实意义。 1建立椭圆曲线公钥密码体制 1.1椭圆曲线域的参数 在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线。在 IEEE P1363标准中,定义其参数为一个七元组:T=(q,FR,a,b,G,n,h),其中q 代表有限域GF(q),q 为素数或 2 m ;FR 为域表示法,如f(x)为 2 m F 域元素的不可约 多项式的表示法;曲线的方程,当q 为素数时,方程为2 3 ax b y x =++,当q 为2m 时, 方程为 2 32 xy a b y x x +=++,a,b 是方程中的系数;G 为基点;n 为大素数并且等于点G 的阶,h 是小整数称为余因子且#()/q h E n F =。主要的安全性参数是n ,因此ECC 密钥 的长度就定义为n 的长度。 1.2椭圆曲线密码的密钥 选取了基域 q F 和椭圆曲线后,得到了在有限域 q F 上的曲线E 确定的具体形式,即 上述的椭圆曲线域参数的一个七元组。每个用户选取一个整数d(1≤d ≤n-1) 作为其私钥,而以点Q=dG(G 为基点)作其公钥,这样形成一个椭圆曲线公钥密码系统。在这个密码体制中,具体的曲线,基域 q F ,基点G 及其阶n ,以及每个用户的公钥都是该系统的公开参

炉温测试板制作及曲线测试规范(20200517094721)

炉温测试板制作及曲线测试规范 1、目的: 规范SMT炉温测试方法,为炉温设定、测试、分析提供标准,确保产品质量。为炉温曲线的 制作、确认和跟踪过程的一致性提供准确的作业指导; 2、范围: 本规范适用于公司PCBA部SMT车间所有炉温设定、测试、分析及监控。 3.定义: 3.1升温阶段:也叫预热区,从室温到120度,用以将PCBA从环境温度提升到所要求的活性 温度;升温斜率不能超过3°C度/s;升温太快会造成元件损伤、会出现锡球现象,升 温太慢锡膏会感温过度从而没有足够的时间达到活性温度;通常时间控制在60S左右; 3.2恒温阶段:也叫活性区或浸润区,用以将PCBA从活性温度提升到所要求的回流温度; 一是允许不同质量的元件在温度上同质;二是允许助焊剂活化,锡膏中挥发性物质得到 有利挥发,一般普遍的锡膏活性温度是120-150度,时间在60-120S之间,升温斜率一 般控制在1度/S左右;PCBA上所有元件要达到熔锡的过程,不同金属成份的锡膏熔点 不同,无铅锡膏(SN96/AG3.5/CU0.5)熔点一般在217-220度,有铅(SN63/PB37)一 般在183度含银(SN62/PB36/AG2)为179度; 3.3回流阶段:也叫峰值区或最后升温区,这个区将锡膏在活性温度提升到所推荐的峰值温 度,加热从熔化到液体状态的过程;活性温度总是比熔点低,而峰值温度总在熔点之上, 典型的峰值温度范围是(SN63/PB37)从205-230度;无铅(SN96/AG3.5/CU0.5)从235-250 度;此段温度设定太高会使升温斜率超过2-5度/S,或达到比所推荐的峰值高,这种情 况会使PCB脱层、卷曲、元件损坏等;峰值温度:PCBA在焊接过程中所达到的最高温度; 3.4冷却阶段:理想的冷却曲线一般和回流曲线成镜像,越是达到镜像关系,焊点达到的固 态结构越紧密,焊点的质量就越高,结合完整性就越好,一般降温斜率控制在4度/S; 4、职责: 4.1 工程部 4.1.1工程师制定炉温测试分析标准,炉温测试员按此标准测试、分析监控炉温。 4.1.2 指导工艺技术员如何制作温度曲线图; 4.1.3 定义热电偶在PCB上的测试点,特别是对一些关键的元件定位; 4.1.4基于客户要求和公司内部标准来定义温度曲线的运行频率;

直线和圆弧的生成算法

第3章直线和圆弧的生成算法 3.1直线图形的生成算法 数学上的直线是没有宽度、由无数个点构成的集合,显然,光栅显示器只能近地似显示直线。当我们对直线进行光栅化时,需要在显示器有限个像素中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换。 由于在一个图形中,可能包含成千上万条直线,所以要求绘制算法应尽可能地快。本节我们介绍一个像素宽直线绘制的三个常用算法:数值微分法(DDA)、中点画线法和Bresenham算法。 3.1.1逐点比较法 3.1.2数值微分(DDA)法 设过端点P0(x0 ,y0)、P1(x1 ,y1)的直线段为L(P0 ,P1),则直线段L的斜率 L的起点P 的横坐标x0向L的终点P1的横坐标x1步进,取步长=1(个像素),用L 的直线方程y=kx+b计算相应的y坐标,并取像素点(x,round(y))作为当前点的坐标。因为: y = kx i+1+b i+1 = k1x i+b+k x = y i+k x 所以,当x =1; y i+1 = y i+k。也就是说,当x每递增1,y递增k(即直线斜率)。根据这个原理,我们可以写出DDA(Digital Differential Analyzer)画线算法程序。

DDA画线算法程序: void DDALine(int x0,int y0,int x1,int y1,int color) { int x; float dx, dy, y, k; dx = x1-x0; dy=y1-y0; k=dy/dx,;y=y0; for (x=x0;x< x1;x++) { drawpixel (x, int(y+0.5), color); y=y+k; } } 注意:我们这里用整型变量color表示像素的颜色和灰度。 举例:用DDA方法扫描转换连接两点P0(0,0)和P1(5,2)的直线段。 x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 图3.1.1 直线段的扫描转换 注意:上述分析的算法仅适用于|k| ≤1的情形。在这种情况下,x每增加1,y最多增加1。当|k| 1时,必须把x,y地位互换,y每增加1,x相应增加1/k。在这个算法中,y与k必须用浮点数表示,而且每一步都要对y 进行四舍五入后取整,这使得它不利于硬件实现。

椭圆拓展(一)椭圆中的中点弦点差法

椭圆拓展(一) 椭圆内的中点弦点差法 【学习重点】 1.点差法的基本思想方法:设而不求 2.点差法适用范围:斜率固定的平行线截二次曲线所得线段 中点的轨迹,一般用于椭圆内的中点弦问题。(在圆内应该用特殊方法) 3.点差法的核心:求直线斜率和中点弦坐标的等量关系。 【核心推论】 1. 过定点直线和封闭曲线恒有公共点的充要条件是定点在曲线内部或曲线上。 过定点直线和封闭曲线恒有两个公共点的充要条件是定点在曲线内部。 2. 斜率为k1的直线,交椭圆x2 a2 + y2 b2 =1 (a>b>0)于两点,弦中 点与原点连线的斜率为k2,则k1?k2= b2 a2。

斜率为k 1的直线,交椭圆 y 2a 2 x 2b 2 =1 (a>b>0)于两点,弦 中点与原点连线的斜率为k 2,则 k 1?k 2= 2。 3. 平行弦的中点轨迹方程是过原点的、一条无端点、取椭圆内部分的线段。 【重点例题解析】 例题 已知P(-3,0),过点P 作直线l 交椭圆 x 2 4 +y 2 =1 于A 、 B 两点,求A 、B 的中点M 的轨迹方程。 解:设A(x 1,y 1)、B(x 2,y 2)、 x 1 2 4 +y 12 =1 x 22 4 +y 22 =1 x 12 -x 2 2 4 +(y 12-y 22 )=0 14 (x 1+x 2)(x 1-x 2) +(y 1+y 2)(y 1-y 2)=014 (x 1+x 2)+(y 1+y 2) (y 1-y 2)(x 1-x 2) =0

∴轨迹方程为: 14 (2x)+(2y)?k AB =0 14 (2x)+(2y)?k MP =0 14 (2x)+(2y)? y x+3 =0 x 2 +3x+4y 2 =0 (取x 2 24 +y 22 =1的内部)

椭圆曲线加密算法

椭圆曲线加密算法 椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。 ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA 加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长 1.椭圆曲线 在数学上,椭圆曲线(英语:Elliptic curve,缩写为EC)为一代数曲线,被下列式子所定义 y2=x3+ax+b 其是无奇点的;亦即,其图形没有尖点或自相交。 满足此条件的a b满足:4a3+27b2≠0 图1 在基础上需要定义一个无穷远的点,将此点作为零点:此时椭圆曲线定义为:{(x,y)∈?2|y2=x3+ax+b,4a3+27b2≠0}∪{0} 在椭圆曲线中的群的运算律: 1. 所有的点都在椭圆曲线上 2. 0点作为群上的单元点即 P+0=P 3. P点关于X轴的对称点为P点的逆即 P+(?P)=0

4.对于位于同一条直线上的三个点P,Q,R.则有 P+Q+R=0 图2 P+Q+R=0(无限远点 P Q R三个点的位置是任意的,他们满足加法的结合律,因为这个群是一个阿贝尔群。 2.椭圆曲线加法 当P和Q不相等时(x P≠x Q) 由于是在阿贝尔群上可以将P+Q+R=0改写为P+Q=?R所以在椭圆曲线上的加法定义为P Q 两点加法为P,Q两点连线与曲线的交点R的关于X轴对称点?R 图2-3 P+Q=-R P Q两点的直线的斜率为: m=y P?y Q x P?x Q 这条线与曲线的交点为:R=(x R,y R) x R=m2?x P?x Q y R=y P+m(x R?x P) 因此(x P,y P)+(x Q,y Q)=(x R,?y R)如果在图上表示即为上述的P+Q=?R

动态模量主曲线生成方法

主曲线使用方法 主曲线是一种将有限试验结果扩展至无限范畴的方法,它的前提是实验材料的力学特性具有时温特效,尤其是有机材料。 在时间历程上,测试4-5个温度(或者荷载)条件下的试验数据,然后,将其绘制在时间(x)-试验数据(y)的双对数log-log坐标轴上,使用时-温转换,得到主曲线。时-温转化的方法一般是,首先选择关注温度,并将该温度作为主温度;然后,顺次将不同温度下的数据沿时间(x)轴进行平移,平移多少由转换因子大小决定;最终,得到主曲线。 转换因子大小与温度值有关,可以选择WLF公式,也可以选择Arrhenius(阿尼乌斯)公式来计算,二者均可以从很多文献里获取。当不同的温度的曲线向主温度曲线处平移时,转换因子的正负便与平移方向有关,向左移是“+”,向右移是“-”(突然想起高中数学老师教的“+左-右”)。 有了上边的基本概念,就可以进行实际操作了,很简单,所有的操作都是在EXCEL表格里进行(在雅虎搜索里输入NCHRP09-29_mastersolver2-2.xls,点搜索后获取),只是要保证EXCEL 里装了solver规划求解宏(以OFFICE2007为例,点击左上角windows-Excel选项-加载项-规划求解加载项-转到-规划求解加载项-确定,如下图所示)。

在EXCEL表格DATA的sheet里,输入动态模量值和混合料其他体积参数,然后进入FIT的sheet里,将C4:C7里的数据拷贝到B4:B7,点击“规划求解”启动宏,目标单元格选择为Ⅰ23,“等于”这一项选择“最小值”,可变单元格选择为B4:B7,点击“求解”便可得到最小二乘法所列的最佳值。一般情况下,只需要一次计算就够了,个别的情况,可在使用一次规划求解,看看计算的结果不会变为止(第二次规划求解时不需要再拷贝C4:C7的数据)。

中点画椭圆法实验报告

一、实验目标 1.了解中点画椭圆法的基本思想; 2.掌握中点画椭圆法的基本步骤。 二、实验内容 本次实验要解决的问题主要是中点画椭圆法,椭圆中心不在原点及长轴和短轴任意长度的画椭圆问题。 原理简述:中点法依据椭圆斜率将第一像限的椭圆(b ≤a)分成两部分。根据 斜率变化确定步长方向:斜率绝对值小于1的区域1内x 方向取单位步长;斜率绝对值大于 1的区域2内y 方向取单位步长。 椭圆对称性质:椭圆分别关于X 轴、Y 轴对称。因此在计算椭圆生成的时候,只需要计算1/4个椭圆,经过对称原理就可以实现其他3/4个椭圆的生成了,即:计算出目标点(x,y )的坐标,必然存在(x,-y )、(-x,y )(-x,-y )。此方案中采用计算第一象限中椭圆的生成,即:计算x=0到y=0的1/4的椭圆。先通过平移的方法将假设椭圆中心在坐标原点,然后计算,最后再平移到真实中心位置。 三、实验步骤 一、打开cgdemoMFC 工程 1.打开Microsoft Visual Studio 2008 2.File-->Open-->cgdemo.sln 二、添加菜单 1.左侧视图栏中有三个视图:ClassView 、ResourceView 、FileView ,点击 ResourceView 2.展开cgdemo ,展开Menu ,双击IDR_MAINFRAME 第一象限椭圆区域划分 区域1:椭圆切线斜率小于1; 区域2:椭圆切线斜率大于1。

3.在右侧窗口菜单栏中找到“基本图形生成”菜单项,在该菜单项中添加“中点画圆法”,在“中点画圆法”属性框中找到ID框填:ID_LINE_ELLIPSE。 三、创建、编辑函数 1.打开cgdemoView.h头文件,在cgdemoView类枚举类型成员变量m_drawstyle中添加LINE_ELLIPSE。 2.给菜单项“中点画椭圆法”添加命令消息响应函数OnLineCircle()在该函数中添加以下程序代码。 void CcgdemoView::OnLineEllipse() { // TODO: Add your command handler code here m_drawstyle=LINE_ELLIPSE; Invalidate(true); } 3.在鼠标左键按下消息响应函数中添加当m_drawstyle为LINE_ELLIPSE时的情况,代码如下所示。 void CcgdemoView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default switch(m_drawstyle) { case LINE_DDA: case LINE_MIDPT: case LINE_ELLIPSE: } 4.在鼠标移动消息响应函数中添加m_drawstyle为LINE_CIRCLE时的情况,代码如下所示。 void CcgdemoView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default switch(m_drawstyle) { case LINE_DDA: case LINE_MIDPT: case LINE_ELLIPSE: } 5.在cgdemoView.h头文件类中添加成员函数void MidpointEllipse(CDC* pDC, int x0,int y0,int x1, int y1,int color);并在cgdemoView.cpp源文件中void CcgdemoView::MidpointEllipseCDC* pDC,int x0,int y0,int x1,int y1,int color)为其 添加我们编写的中点画椭圆法代码;在中点画圆法中我们要计算两点之间的距离

直线和圆弧的生成算法讲课稿

直线和圆弧的生成算 法

第3章直线和圆弧的生成算法 3.1直线图形的生成算法 数学上的直线是没有宽度、由无数个点构成的集合,显然,光栅显示器只能近地似显示直线。当我们对直线进行光栅化时,需要在显示器有限个像素中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换。 由于在一个图形中,可能包含成千上万条直线,所以要求绘制算法应尽可能地快。本节我们介绍一个像素宽直线绘制的三个常用算法:数值微分法(DDA)、中点画线法和Bresenham算法。 3.1.1逐点比较法 3.1.2数值微分(DDA)法 设过端点P0(x0,y0)、P1(x1,y1)的直线段为L(P0,P1),则直线段L的斜率 L的起点P0的横坐标x0向L的终点P1的横坐标x1步进,取步长=1(个像素),用L的直线方程y=kx+b计算相应的y坐标,并取像素点(x,round(y))作为当前点的坐标。因为: y i+1= kx i+1+b = k1x i+b+k?x = y i+k?x

所以,当 x =1; y i+1= y i+k。也就是说,当x每递增1,y递增k(即直线斜率)。根据这个原理,我们可以写出DDA(Digital Differential Analyzer)画线算法程序。 DDA画线算法程序: void DDALine(int x0,int y0,int x1,int y1,int color) { int x; float dx, dy, y, k; dx = x1-x0; dy=y1-y0; k=dy/dx,;y=y0; for (x=x0;x< x1;x++) { drawpixel (x, int(y+0.5), color); y=y+k; } } 注意:我们这里用整型变量color表示像素的颜色和灰度。 举例:用DDA方法扫描转换连接两点P0(0,0)和P1(5,2)的直线段。 x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5

椭圆离心率的三种求法中点弦方程三种求法

椭圆离心率的三种求法: (1)若给定椭圆的方程,则根据焦点位置确定a 2,b 2,求a ,c 的值,利用公式e =c a 或利用 22 1a b e -=直接求解. (2)求椭圆的离心率时,若不能直接求得c a 的值,通常由已知寻求a , b , c 的关系式,再与a 2 =b 2+c 2组成方程组,消去b 得只含a ,c 的方程,再化成关于e 的方程求解. (3)求离心率时要充分利用题设条件中的几何特征构建方程求解,从而达到简化运算的目的. 涉及椭圆离心率的范围问题要依据题设条件首先构建关于a ,b ,c 的不等式,消去b 后,转化为关于e 的不等式,从而求出e 的取值范围. 1. 若椭圆x 2a 2+y 2b 2=1(a >b >0)的左、右焦点分别为F 1,F 2,线段F 1F 2被点??? ??0,2b 分成5∶3 的两段,则此椭圆的离心率为( ) A.1617 B.41717 C.45 D.25 5 解析 依题意,得c +b 2c -b 2 =5 3,∴c =2b ,∴a = b 2+ c 2=5b ,∴e = 2b 5b =255. 答案D 点评 本题的解法是直接利用题目中的等量关系,列出条件求离心率. 2. 设P 是椭圆x 2a 2+y 2 b 2=1(a >b >0)上的一点,F 1,F 2是其左,右焦点.已知∠F 1PF 2=60°, 求椭圆离心率的取值范围. 分析 本题主要考查椭圆离心率取值范围的求法,建立不等关系是解答此类问题的关键. 解 方法一 根据椭圆的定义,有|PF 1|+|PF 2|=2a .① 在△F 1PF 2中,由余弦定理,得 cos 60°=|PF 1|2+|PF 2|2-|F 1F 2|22|PF 1||PF 2|=1 2, 即|PF 1|2+|PF 2|2-4c 2=|PF 1||PF 2|.② ①式平方,得|PF 1|2+|PF 2|2+2|PF 1||PF 2|=4a 2.③ 由②③,得|PF 1||PF 2|=4b 2 3 .④

直线、圆、椭圆的生成算法

计算机科学与技术学院 2012-2013学年第一学期《计算机图形学》实验报告 班级:100341C 学号:100341328 姓名:魏然 教师:惠康华 成绩:

实验项目:直线、圆、椭圆的生成算法 一、实验目的与要求 (1)了解Visual C++等编程环境中常用控件命令与绘图函数,初步掌握在实验设计集成环境(IDE)下进行图形处理程序的设计方法。 (2)熟练掌握直线的3种扫描转换算法:DDA算法,中点算法和Bresenham算法。 (3)掌握中点画圆算法、圆的Brensenham算法和椭圆的中点算法。 二、实验内容 (1)在Visual C++环境中设计MFC单文档程序,利用消息处理函数,搭建能运行图形算法程序的平台。(2)在平台中使用已有的点、线、圆等绘图函数,设计一个平面图形。Visual C++基本绘图函数可参考有关文献。 (3)根据教材中给定的算法,实现直线段的3种生成算法:DDA算法,中点法和Bresenham算法。(4)根据教材中给定的算法,实现圆与椭圆的生成算法。 三、重要算法分析 (一)、直线的生成 1、DDA算法 定义直线两端点和直线颜色:整型变量 x0=?, y0=?,x1=?,y1=?,c=颜色; 定义整型变量x,y,i;浮点数dx,dy,k; 根据数学算法得到斜率k, k=dy/dx,其中dx=(float)(x1-x0),dy=(float)(y1-y0); 定义x=x0;y=y0; 通过对x和y各增加一个小增量,计算下一步的x、y值。 当k的绝对值小于1的时候,标记一个像素点,像素点的坐标为(x,int(y+0.5),c),y=y+k,如果x=x i,则停止; 当k的绝对值大于或等于1的时候,标记一个像素点,像素点的坐标为(int(x+0.5),y,c),x=x+1/k,如果y=y i,则停止; 2、中点算法 定义直线两端点和直线颜色:整型变量 x0=?, y0=?,x1=?,y1=?,c=颜色; 定义浮点数:a,b,d1,d2,d,x,y;

常见OTDR测试曲线解析80569

常见OTDR测试曲线解析 一、正常曲线 一般为正常曲线图, A 为盲区,B 为测试末端反射峰。测试曲线为倾斜的,随着距离的曾长,总损耗会越来越大。用总损耗( dB )除以总距离(Km)就是该段纤芯的平均损耗(dB/Km )。 二、光纤存在跳接点 中间多了一个反射峰,因为很有可能中间是一个跳接点,现城域网光缆中,比较常见。如:现主干光缆由汇接局至光缆交接箱,当有需求时,需由光交接箱布放光缆至用户端,光交接箱就需跳纤联接,所以在测试这样的纤芯时,就会出现像图

中这样的曲线图。当然也会有例外的情况,总之,能够出现反射峰,很多情况是因为末端的光纤端面是平整光滑的。端面越平整,反射峰越高。例如在一次中断割接当中,当光缆砍断以后,测试的曲线应该如光路存在断点图所示,但当你再测试时,在原来的断点位置出现反射峰的话,那说明现场的抢修人员很有可能已经把该纤芯的端面做好了。 三、异常情况 出现图中这种情况,有可能是仪表的尾纤没有插好,或者光脉冲根本打不出去,再有就是断点位置比较进,所使用的距离、脉冲设置又比较大,看起来就像光没有打出去一样。出现这种情况,1、要检查尾纤连接情况;2 、就是把OTD R的设置改一下,把距离、脉冲调到最小,如果还是这种情况的话,可以判断:1、尾纤有问题;2、OTDR 上的识配器问题;3、断点十分近,OTDR不足以测试出距离来。如果是尾纤问题,只要换一根尾纤就知道,不行的话就要试着擦洗识配器,或就近查看纤芯了。 四、非反射事件

1、这种情况比较多见,曲线中间出现一个明显的台阶,多数为该纤芯打折,弯曲过小,受到外界损伤等因素,多为故障点。 2、若光纤模式、折射率不一样,接续时也会出现此情况,常见光纤G651光纤(标准单模光纤,B1光缆),G653光纤(色散位移光纤,B2光缆)。造成这种现象的原因是由于接头两侧光纤的背向散射系数不一样,接头后光纤背向散射系数大于前段光纤背向散射系数,而从另一端测则情况正好相反,折射率不同也有可能产生增益现象。所以要想避免这种情况,只要用双向测试法就可以了。 五、光纤存在断点 这种情况一定要引起注意!曲线在末端没有任何反射峰就掉下去了,分析:1如果知道纤芯原来的距离,1、在没有到达

快速判断直线与椭圆位置关系的方法

快速判断直线与椭圆位置关系的方法(原创) 四川省宜宾县第二中学 傅小力 在解决椭圆的选择、填空问题中需要快速判断与坐标轴不平行的直线0:=++C By Ax l 和椭圆)0(122 22 >>=+b a b y a x 的位置关系时,我建议我的学生: 第一步:找出直线与坐标轴的交点,判断是否在已知椭圆内部或在椭圆上, 否,则第二步:设椭圆上任一点P (θθsin ,cos b a ), C By Ax m ++=,则 C b B a A C Bb Aa m +++=++=)sin(sin cos 2222?θθθ, 其中R Bb Aa ∈=θ?,tan , 故],[22222222 b B a A C b B a A C m +++-∈。 结合线性规划的知识,结论如下: ① 若0>m 恒成立 即0>++C By Ax 恒成立,则椭圆上的点都在直线l 的同一侧,故直 线l 与椭圆相离;若0+- 的最大值或 b B a A C m b B a A C 即22222C b B a A +>时,直线与椭圆相离; ② 若0≥m 恒成立 即0≥++C By Ax 恒成立,则椭圆与直线l 有公共点,除公共点外, 其余的点都在直线l 的同一侧,故直线l 与椭圆相切;同理0≤m 恒成立 即 0≤++C By Ax 恒成立时。如图2。此时22222C b B a A +=,可用来求出切线方程。 ③ 若0022222222>++<+-b B a A C b B a A C 且 ,则椭圆上的点使 0>++C By Ax ,0=++C By Ax ,0<++C By Ax 三种情况都存在,故椭圆上的点有的在直线l 的两侧,有的在直线l 上,所以此时直线l 和椭圆相交。如图3。

§3.2圆、圆弧的生成—Bresenham算法

§3.2圆的生成——Bresenham算法 条件:给定圆心(x c,y c)和半径R 约定:只考虑圆心在原点,半径为整数R的圆x2+y2.=R2。对于圆心不在原点的圆,可先通过平移转换,化为圆心在原点的圆,再进行扫 描转换,把所得到的像素集合加上一个位移量,就可以把目标圆光 栅化。 在众多圆的生成算法,如逐点比较法、角度DDA法、Bresenham算法中,Bresenham画圆法是一种最简单有效的的方法。 首先注意到只要生成一个八分圆,那么,圆的其它部分就可以通过一系列的对成变换得到。 1 2 3 4 5 6 7 8 由算法生成 y=x 第一八分圆关于y=x对称变换 第一四分圆关于x=0对称变换 上半圆关于y=0对称变换 如果以点x=0,y=R为起点按顺时针方向生成圆,则在第一象限内y是x 的单调递减函数。 要在这三个像素中选择一个使其与理想圆的距离的平方达到最小,即下 列数值中的最小者。 R

(0,R) (R,0) x y 这样,从圆上任一点出发,按顺时针方向生成圆时,为了最佳逼近该圆,对于下一像素的取法只有三种可能的选择,即正右方像素、正下方像素和右下角像素,分别记作:m H、m V、m D。 (x i,y i) (x i,y i-1) (x i+1,y i) (x i+1,y i-1) m H m D m V m H=|(x i+1)2+(y i)2-R2| m V=|(x i)2+(y i+1)2-R2| m D=|(x i+1)2+(y I-1)2-R2| m H (x i,y i) (x i+1,y i) (x i+1,y i+1) (x i+1,y i-1) (x i-1,y i-1) (x i,y i-1) m V m D 1 2 3 5 4 圆与点(x i,y i)附近光栅格网的相交关系只有五种可能。

椭圆曲线参数选取

关于SM2椭圆曲线参数选取 一.安全的椭圆曲线的选取 1.椭圆曲线上的公钥密码体制的安全性是建立在椭圆曲线离散对数的基础上, 但并不是所有椭圆曲线都可以应用到公钥密码体制中, 为了保证其安全性, 必须选取安全椭圆曲线,即只有选到合适的有限域GF(p)和椭圆曲线(ECC),能够抵抗攻击ECDLP算法的攻击,才能保证所选ECC的安全性。 若某椭圆曲线存在优于n1/2级(n是基点阶次)计算复杂度的攻击方法,则称此曲线为弱椭圆曲线。Fp上的超奇异椭圆曲线(有限域Fp的特征整除q+1-#E(Fp))和Fp上的异常曲线(#E(Fp)=p)都是弱椭圆曲线。(国密局文档p4,p25A.4抗攻击椭圆曲线满足的条件)。下面是选取曲线时应遵循的原则:(一种椭圆曲线参数生成的快速算法) (1)为了抗击Pollard-ρ攻击,所选取椭圆曲线的阶#E(GF(p))的分解式中应该包含一个大的素数因子,目前应不小于160bit; (2)为了抗击Weil对和Tate对的攻击,对于1≤k≤30,n不能除p k-1(不宜选取超奇异椭圆曲线); (3)为了抗击Semaev-Smart-Satoh-Araki的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(F P)≠p(不宜选取异常椭圆曲线); (4)对于二进制域GF(2m)的度m不宜为合数。Gaudry,Hess和Smart 提出,若m有小约数l(l=4),存在比Pollard's rho算法更快求解ECDLP 的方法。 (5)选择GF(p)的子域H,满足它的阶|H| 是#E 的最大素因子n,并在H 上实现ECC。

2.一般来说有4 种寻找安全椭圆曲线的方法:(椭圆曲线密码体制及其参数生成的研究.2006.DR) (1) 有限域GF( p) 上随机生成一椭圆曲线, 直接计算其阶, 判断阶是否为大素数或含大素数因子, 若是即确定,否则继续选取曲线, 直至符合条件。 (2) 取具有一定特殊性椭圆曲线的系数, 计算该椭圆曲线的阶, 对该阶进行判断, 直至找到所需要的安全曲线。 (3) 如果p = 2m , 其中m 能被一个比较小的整数d 整除, 首先在有限域GF( p1 ) ( p1 = 2 d ) 上选择一椭圆曲线E,并计算其阶, 根据此值, 利用Weil 定理[ 2] 计算该曲线在其扩域GF( p) 上的阶, 若此阶符合安全标准, 再找曲线E在域GF( p) 上的嵌入E, 则E 即为所需的安全椭圆曲线。 (4) 首先给出具有安全条件的曲线阶, 然后构造一具有此阶的椭圆曲线。目前国内外比较流行的计算椭圆曲线阶的算法有complex multiplication 算法、SEA 算法、Satoh 算法。应用广泛的椭圆曲线公钥密码体制( ECC) 中大多是基于特征2 的有限域上。 3.尽管ECC的参数选取方法有许多种,应用最多的是随机选择方法,它是根据任意给定曲线的系数,计算曲线的阶直到找到素数(或近素数)阶的椭圆曲线。 (1)参数p的选取:p当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求; (2)参数a、b的选取:已知素域的规模p,求解比特串SEED及Fp中的元素a,b(D.1p37参数生成)

炉温曲线测试规范

炉温曲线测试规范 1.目的 本规范规定了炉温曲线的测试周期、测试方法等,以通过定期的、正确的炉温曲线测试确定最佳的曲线参数,最终保证PCB装配的最佳、稳定的质量,提高生产效率和产品直通率。 2.定义 2.1回流曲线 在使用焊膏工艺方式中,通过固定在PCB表面的热电偶及数据采集器测试出PCB在回流焊炉中时间与温度的可视数据集合,根据焊膏供应商推荐的曲线,对不同产品通过适当调整温度设置及传输链的速度所得到的最佳的一组炉温设置参数。 2.2固化曲线 在使用点胶或印胶工艺方式中,通过固定在PCB表面的热电偶及数据采集器测试出PCB在固化炉中时间与温度的可视数据集合,根据焊膏供应商推荐的曲线,对不同产品通过适当调整温度设置及传输链的速度所得到的最佳的一组炉温设置参数。 2.3基本产品 指在一个产品系列中作为基本型的产品,该系列的其它产品都在此基础上进行贴装状态更改或对印制板进行少量的改版,一般情况下一个产品系列同一功能的印制板其图号仅在版本号上进行区分,如“***-1”与“***-2”或“***V1.1”与“***V1.2”等。 2.4派生产品 指由于设计贴装状态更改、或印制板在原有基础上进行少量的改版所生成的其所改动的CHIP 类器件数量未超过50只、同时没有对外形尺寸大于□20mm×20mm的IC器件(不包括BGA、CSP等特殊封装的器件)的数量进行调整的产品。 2.5全新产品 指产品公司全新开发、设计贴装状态更改或印制板在原有基础上改版时所生成的其所改动的CHIP类器件数量超过50只、或对外形尺寸大于□20mm×20mm的IC器件的数量进行调整的产品。凡状态更改中增加或减少了BGA、CSP等特殊封装的器件的产品均视为全新产品。 2.6测试样板 指用来测试炉温的实装板,该板必须贴装有与用来测试的生产状态基本一致的元器件。 3.职责 4.炉温测试管理 4.1炉温测试周期:原则上工程师根据当月所生产的产品应每月测试一次,将测试结果记录在“炉温参数设置登记表”上,并将炉温曲线打印存档。 4.2原则上全新产品必须经过炉温测试,确定准确的炉温设置参数,但对批量小于100套的全新工程师可以根据原有的相似产品根据观察实物的焊接效果进行自行调整。 4.3全新产品在炉温测试时应领取新的测试样板,派生产品可采用原基本产品的测试样板进行炉温测试,以针对不同的产品及状态设置相应准确的炉温参数。 5.测试准备 5.1炉温测试使用DataPaq炉温测试仪,热电偶使用K型。 5.2选择测温点。 热电偶应该安装在能代表PCB板上最热与最冷的连接点上(引脚到焊盘的连接点上),以及热敏感器件和其它高质量器件上,以保证其被足够地加热,一般测温点至少在三点及以上。测温点按以

openGL画直线、圆、椭圆

使用openGl画直线(DDA算法)、画圆、椭圆(Bresenham算法) #include #include #include /* initialization: */ void myinit(void) { /* attributes */ glClearColor(1.0, 1.0, 1.0, 0.0); /* white background */ glColor3f(1.0, 0.0, 0.0); /* draw in red */ /* set up viewing: */ /* 500 x 500 window with origin lower left */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500.0, 0.0, 500.0); glMatrixMode(GL_MODELVIEW); } void plot_circle_points(int xc,int yc,int x,int y)//画圆 { glBegin(GL_POINTS); glV ertex3f(xc+x,yc+y,0); glV ertex3f(xc-x,yc+y,0); glV ertex3f(xc+x,yc-y,0); glV ertex3f(xc-x,yc-y,0); glV ertex3f(xc+y,yc+x,0); glV ertex3f(xc-y,yc+x,0); glV ertex3f(xc+y,yc-x,0); glV ertex3f(xc-y,yc-x,0); glEnd(); } void drawcircle(int xc,int yc,int radius) { int x,y,p; x=0; y=radius; p=3-2*radius; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS);

圆的生成算法

圆的生成算法 利用直线坐标法和极坐标法生成圆周颇费时间,而圆的Bresenham算法则简捷很多。一.圆的Bresenham算法思想: 设圆的半径为r,先考虑圆心在(0,0),并从x=0、y=r开始的顺时针方向的1/8圆周的生成过程。在这种情况下,x每步增加1,从x=0开始,到x=y结束。即有 X i+1=X i+1 相应地yi+1则在两种可能中选择: Y i+1=y i或者y i+1=y i-1 选择的原则是考虑精确值y是靠近yi还是靠近yi-1,计算公式为 Y2=r2-(x i+1)2 d1=y i2-y2=y i2-r2+(x i+1)2 d2=y2-(y i-1)2=r2-(x i+1)2-(y i-1)2 令pi=d1-d2,并代入d1、d2,则有 P i=2(x i+1)2+y i2+(y i-1)2-2r2(1) Pi称为误差。如果Pi<0,则yi+1=yi,否则yi+1=yi-1.pi的递归式为 P i+1=p i+4x i+6+2(y i+12-y i2)-2(y i+1-y i) (2) P i的初值由式(1)代入xi=0,yi=r,而得 P1=3-2r (3) 根据上面的推导,圆周生成算法思想如下: (1)求误差初值,p1=3-2r,i=1,画点(0,r); (2)求下一个光栅位置,其中x i+1=x i+1,如果p i<0,则y i+1=y i,否则y i+1=y i-1; (3)画点(x i+1,y i+1); (4)计算下一个误差,如果p i<0,则p i+1=p i+4x i+6,否则p i+1=p i+4(x i-y i)+10; (5)I=i+1,如果x=y,则结束,否则返回步骤2; 虽然(1)式表示p i+1的算法很复杂,但因为y i+1只能y i或y i-1,使得步骤(4)的算法变得简单,只需做加法和乘4的乘法。 圆的Bresenham算法的程序实现如下: #include #include #include #include void BresenhemCircle(int centerx, int centery, int radius, int color, int type); void initgr(void) /* BGI初始化*/ {

相关文档
最新文档