基于verilog的CMI编解码

基于verilog的CMI编解码,第1张

module cmi_code(clk,reset,data,code_out)

input clk,data

input reset

output [1:0] code_out

reg flag

reg [1:0] code_out

always @(posedge clk or negedge reset)

begin

if(!reset) begin

code_out<=0

end

else if (data==1) begin

if (flag)begin

code_out[1]<=0

code_out[0]<=0

flag<=~flag

end

else if (!flag) begin

code_out[0]<=1

code_out[1]<=1

flag<=~flag

end

end

else if(data==0) begin

code_out[0]<=1

code_out[1]<=0

end

end

endmodule

RSA算法它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和 *** 作,也很流行。算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。但RSA的安全性一直未能得到理论上的证明。滑耐它经历了各种攻击,至今未被完全攻破。一、RSA算法:首先,找出三个数,p,q,r,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数p,q,r这三个数便是privatekey接著,找出m,使得rm==1mod(p-1)(q-1)这个m一定存在,因为r与(p-1)(q-1)互质,用辗转相除法就可以得到了再来,计算n=pqm,n这两个数便是publickey编码过程是,若资料为a,将其看成是一个大整数,假设a=n的话,就将a表成s进位(s因为rm==1mod(p-1)(q-1),所侍斗以rm=k(p-1)(q-1)+1,其信谈春中k是整数因为在modulo中是preserve乘法的(x==ymodzandu==vmodz=>xu==yvmodz),所以,c==b^r==(a^m)^r==a^(rm)==a^(k(p-1)(q-1)+1)modpq1.如果a不是p的倍数,也不是q的倍数时,则a^(p-1)==1modp(费马小定理)=>a^(k(p-1)(q-1))==1modpa^(q-1)==1modq(费马小定理)=>a^(k(p-1)(q-1))==1modq所以p,q均能整除a^(k(p-1)(q-1))-1=>pq|a^(k(p-1)(q-1))-1即a^(k(p-1)(q-1))==1modpq=>c==a^(k(p-1)(q-1)+1)==amodpq2.如果a是p的倍数,但不是q的倍数时,则a^(q-1)==1modq(费马小定理)=>a^(k(p-1)(q-1))==1modq=>c==a^(k(p-1)(q-1)+1)==amodq=>q|c-a因p|a=>c==a^(k(p-1)(q-1)+1)==0modp=>p|c-a所以,pq|c-a=>c==amodpq3.如果a是q的倍数,但不是p的倍数时,证明同上4.如果a同时是p和q的倍数时,则pq|a=>c==a^(k(p-1)(q-1)+1)==0modpq=>pq|c-a=>c==amodpqQ.E.D.这个定理说明a经过编码为b再经过解码为c时,a==cmodn(n=pq)但我们在做编码解码时,限制0intcandp(inta,intb,intc){intr=1b=b+1while(b!=1){r=r*ar=r%cb--}printf("%d\n",r)returnr}voidmain(){intp,q,e,d,m,n,t,c,rcharsprintf("pleaseinputthep,q:")scanf("%d%d",&p,&q)n=p*qprintf("thenis%3d\n",n)t=(p-1)*(q-1)printf("thetis%3d\n",t)printf("pleaseinputthee:")scanf("%d",&e)if(et){printf("eiserror,pleaseinputagain:")scanf("%d",&e)}d=1while(((e*d)%t)!=1)d++printf("thencaculateoutthatthedis%d\n",d)printf("thecipherpleaseinput1\n")printf("theplainpleaseinput2\n")scanf("%d",&r)switch(r){case1:printf("inputthem:")/*输入要加密的明文数字*/scanf("%d",&m)c=candp(m,e,n)printf("thecipheris%d\n",c)breakcase2:printf("inputthec:")/*输入要解密的密文数字*/scanf("%d",&c)m=candp(c,d,n)printf("thecipheris%d\n",m)break}getch()}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12316775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存