zoukankan      html  css  js  c++  java
  • 背包公钥系统

    unit public_key; 
     
    interface 
     
    uses 
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
      Dialogs, StdCtrls, ExtCtrls; 
     
    type 
      TForm1 = class(TForm) 
        Panel1: TPanel; 
        Label1: TLabel; 
        Edit1: TEdit; 
        Edit2: TEdit; 
        Button1: TButton; 
        Button2: TButton; 
        Edit3: TEdit; 
        Button3: TButton; 
        procedure Button1Click(Sender: TObject); 
        procedure Button3Click(Sender: TObject); 
        procedure Button2Click(Sender: TObject); 
      private 
        { Private declarations } 
      public 
        { Public declarations } 
      end; 
     
    var 
      Form1: TForm1; 
    var 
      M:array of integer; 
      A:array of integer; 
      B:array of integer; 
      c,w_1,k:integer;        //k>b1+b2+...+bn; 
                              //w_1是w的逆; 
     
    implementation 
     
     
    {$R *.dfm} 
     
    Function judge_pri_num(p:integer):integer;          //判断是否是素数; 
    var 
        l,i:integer; 
    begin 
        i:=2; 
        l:=0; 
        while(i<=Sqrt(strtofloat(inttostr(p)))) and (l=0) do 
          if p mod i=0 then l:=1 else i:=i+1; 
        judge_pri_num:=l; 
    end; 
     
    Function judge_twonum_prime(m,n:integer):integer;   //判断两个数是否互素; 
    var 
        i,temp,p:integer; 
    begin 
        p:=0; 
        if m>n then            //确定m<n,若m>n,则调换 
          begin 
            temp:=m; 
            m:=n; 
            n:=temp; 
          end; 
        for i:=2 to m do 
          if (m mod i=0) and (n mod i=0) then 
            p:=1;              //说明m,n不互素; 
        judge_twonum_prime:=p; 
    end; 
     
    procedure produce_a(j:integer);     //产生序列A[i]; 
    var 
        i,m,n,w,w_1:integer; 
    begin 
        setlength(B,j-1); 
        setlength(A,j-1); 
        B[0]:=random(10); 
        for i:=1 to (j-1) do                //产生随机的超递增序列B[i]; 
          B[i+1]:=2*B[i]+random(100); 
        k:=2*B[j-1]+random(10); 
        repeat 
        w:=random(1000); 
        until judge_twonum_prime(k,w)=0; 
        m:=1; 
        repeat 
          n:=w*m; 
          m:=m+1; 
        until n mod k=1; 
        w_1:=n; 
        for i:=0 to (j-1) do 
          A[i]:=(B[i]*w) mod k;                  //将A[i]作为公钥; 
    end; 
     
     
    procedure TForm1.Button1Click(Sender: TObject);   //加密过程; 
    var 
        s1:string; 
        i,j:integer; 
    begin 
        s1:=edit1.Text; 
        i:=length(s1);                    //No error; 
        //edit4.Text:=Copy(s1,0,1); 
        c:=0; 
        setlength(M,i-1); 
        for j:=0 to i-1 do 
          M[j]:=strtoint(Copy(s1,j,1)); 
        //edit4.Text:=inttostr(M[1]); 
        produce_a(i); 
        for j:=0 to (i-1) do 
          c:=c+A[j]*M[j]; 
        edit2.Text:=inttostr(c); 
    end; 
     
    procedure TForm1.Button3Click(Sender: TObject); 
    begin 
        close; 
    end; 
     
    procedure TForm1.Button2Click(Sender: TObject);   //解密过程; 
    var 
        i,j,m:integer; 
        s:string; 
    begin 
        s:=''; 
        i:=(c*w_1) mod k; 
        j:=length(edit1.Text); 
        setlength(M,j-1); 
        for m:=0 to (j-1) do 
          M[m]:=0; 
        for m:=(j-1) to 0 do 
          begin 
            if B[m]<i then 
              begin 
                M[m]:=1; 
                i:=i-B[m]; 
              end 
          end; 
        for m:=0 to (j-1) do 
          s:=s+'inttostr(M[m])'; 
        edit3.Text:=s; 
    end; 
     
    end. 
    

      

  • 相关阅读:
    jvm学习(重点)
    java单例模式之懒汉式分析
    spring中bean实例化时机以及整个运转方式
    servlet的总结
    NGINX location 在配置中的优先级
    java多态 以及静态绑定 动态绑定积累
    有关string stringbuff stringbuild 的区别
    java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
    java线程方面的知识
    Jmeter的接口测试简介
  • 原文地址:https://www.cnblogs.com/toosuo/p/3372524.html
Copyright © 2011-2022 走看看