LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1855|回复: 5

电子签名学习...(还没有完全OK)-->学习完后请加精哦...

[复制链接]
发表于 2005-3-22 11:39:57 | 显示全部楼层 |阅读模式
1.
ActivePerl-5.8.4.810-MSWin32-x86.msi

在windows电脑上安装此文件...

2.

  1. #! /usr/bin/perl -w
  2. # 產生簽名 => 輸出公共key => 印出 key id

  3. use IO::Handle;
  4. use Fcntl;
  5. use Net::FTP;
  6. use Win32::Console;
  7. use Win32::Process;
  8. use Win32;

  9. if($^O !~ /win32/i) { print STDERR "本工具必須在 windows 上執行\n"; exit 1; }
  10. $env = Win32::GetOSName();
  11. if($env =~ /^Win95$/i || $env =~ /^Win32s/ || $env =~ /^WinNT3/)
  12. {
  13. print STDERR '抱歉,本工具僅支援 windows 98 及 nt4 以上!請聯絡 mis' . "\n";
  14. exit 1;
  15. }
  16. elsif($env =~ /^Win98$/i || $env =~ /^WinMe/)
  17. {
  18. $sysrp = 'C:\\WINDOWS';
  19. $sysdv = 'C:';
  20. }
  21. else
  22. {
  23. $sysrp = $ENV{'SystemRoot'};
  24. $sysdv = $ENV{'SystemDrive'};
  25. }
  26. # $con = new Win32::Console(STD_INPUT_HANDLE);
  27. $con1 = new Win32::Console(STD_OUTPUT_HANDLE);
  28. # $con->Mode(ENABLE_PROCESSED_INPUT);
  29. $con1->Title('auto sign utility for Excell Precisions Co');
  30. $con1->Cls();
  31. $con1->Display();
  32. $attr = $con1->Attr();

  33. *gpg = "c:\\gnupg-w32cli-1.2.1-1\\gpg.exe";

  34. if(! -f $sysrp . "\\unzip.exe")
  35. {
  36. $con1->Write('下載unzip.exe..' . "\n");
  37. $ftp = Net::FTP->new("linux1", Debug => 0);
  38. $ftp->login("anonymous",'anonymous@');
  39. $ftp->binary();
  40. $ftp->cwd("/win32");
  41. $ftp->get('unz542xN.exe',$sysrp . "\\unz542xN.exe");
  42. $ftp->quit();
  43. Win32::SetCwd($sysrp);
  44. system('unz542xN.exe');
  45. unlink 'unz542xN.exe';
  46. }

  47. if(! -f $gpg)
  48. {
  49. $con1->Write('下載gpg..' . "\n");
  50. Win32::SetCwd('C:\\');
  51. if(! -d 'gnupg-w32cli-1.2.1-1')
  52. {
  53.   system("md gnupg-w32cli-1.2.1-1");
  54. }
  55. Win32::SetCwd('C:\\gnupg-w32cli-1.2.1-1');
  56. $ftp = Net::FTP->new("linux1", Debug => 0);
  57. $ftp->login("anonymous",'anonymous@');
  58. $ftp->binary();
  59. $ftp->cwd("/win32");
  60. $ftp->get('gnupg-w32cli-1.2.1-1.zip',"c:\\gnupg-w32cli-1.2.1-1\\gnupg-w32cli-1.2.1-1.zip");
  61. $ftp->quit();
  62. system('unzip.exe gnupg-w32cli-1.2.1-1.zip');
  63. unlink 'gnupg-w32cli-1.2.1-1.zip';
  64. }

  65. $con1->Write('下載相關工具..' . "\n");
  66. $ftp = Net::FTP->new("linux1", Debug => 0);
  67. $ftp->login("anonymous",'anonymous@');
  68. $ftp->binary();
  69. $ftp->cwd("/win32");
  70. $ftp->get('autosign.bat',"c:\\autosign.bat");
  71. $ftp->get('autosign.pl',"c:\\autosign.pl");
  72. $ftp->get('check_sign.pl',$sysrp . "\\check_sign.pl");
  73. $ftp->get('sign.pl',$sysrp . "\\sign.pl");
  74. $ftp->quit();
  75. Win32::SetCwd($sysdv);

  76. $con1->Write('請問您是否已有電子鎖?(y:是/n:否) ');
  77. # $ans = $con->InputChar(1);
  78. # $con->Flush();
  79. $ans = <STDIN>;
  80. $aa = lc(substr($ans,0,1));
  81. if($aa eq 'y')
  82. {
  83. exit 0;
  84. }

  85. if(!(-d "c:\\gnupg"))
  86. {
  87. system "md c:\\gnupg";
  88. }

  89. do
  90. {
  91. $con1->Write('請輸入員工編號(4個數字):' . "\n");
  92. # $idnum = $con->InputChar(4);
  93. # $con->Flush();
  94. $idnum = <STDIN>;
  95. chomp($idnum);
  96. } while($idnum !~ /^\d{4}$/);

  97. open OUT,"> c:\\gnupg\\h.sign";
  98. print OUT $idnum;
  99. close OUT;

  100. $idnum = 'a' . $idnum;

  101. do
  102. {
  103. $con1->Write('請輸入公司分派之電子郵件地址:' . "\n");
  104. $email = <STDIN>;
  105. chomp($email);
  106. $email = lc($email);
  107. (@efd) = ($email =~ /^.+\@(.+)\.(.+)\.(.+)\.(.+)$/);
  108. } while(!defined(@efd) || $efd[1] ne 'excell' || $efd[2] ne 'com' ||
  109.         $efd[3] ne 'tw');

  110. $con1->Write('現在將輸入密碼, 請注意不要被四周的人看到!' . "\n");
  111. do
  112. {
  113. $con1->Write('請輸入解鎖密碼(注意!請不要讓別人知道此密碼, ?K牢記此密碼):' . "\n");
  114. $pas = &getpass;
  115. $con1->Write('請再輸入一次確定' . "\n");
  116. $pas1 = &getpass;
  117. if($pas ne $pas1)
  118. {
  119.   $con1->Write('兩次密碼?K不相符。' . "\n");
  120. }
  121. } while($pas ne $pas1);

  122. $con1->Write('請盡量快速移動滑鼠直到完成為止..' . "\n");
  123. sleep 1;

  124. open OUT,"| $gpg --batch --gen-key";
  125. print OUT <<EOF

  126. Key-Type: DSA
  127. Key-Length: 1024
  128. Subkey-Type: ELG-E
  129. Subkey-Length: 1024
  130. Name-Real: $idnum
  131. Name-Comment: $efd[0]
  132. Name-Email: $email
  133. Expire-Date: 0
  134. Passphrase: $pas
  135. #
  136. %commit

  137. EOF
  138. ;
  139. close OUT;
  140. # export
  141. system "$gpg --keyserver linux1 --send-keys " . $idnum;
  142. # 取得 public key id
  143. @pk = split(/\n/,`$gpg --list-public-keys $idnum`);
  144. $pkn = substr($pk[0],11,8);
  145. $con1->Write('自動下載檢查碼..' . "\n");
  146. $ftp = Net::FTP->new("linux1", Debug => 0);
  147. $ftp->login("anonymous",'anonymous@');
  148. $ftp->binary();
  149. $ftp->get('listsig',"c:\\gnupg\\listsig.txt");
  150. $ftp->quit();
  151. open IN,"< c:\\gnupg\\listsig.txt";
  152. $linein = <IN>;
  153. $con1->Write($linein);
  154. close IN;
  155. Win32::MsgBox("已經完成!\n您的電子鎖位於 c:\\gnupg 目錄內, 請小心保存.\n" .
  156.     "您的公共鎖號碼為:" . $pkn . "\n請告知相關單位, 謝謝.\n檢查碼為:" . $linein .
  157.     '請核對是否正確.' . "\n",0);
  158. exit 0;

  159. sub getpass
  160. {
  161. my ($pas);

  162. $con1->Attr($FG_WHITE | $BG_WHITE);
  163. $pas = <STDIN>;
  164. $con1->Attr($attr);
  165. $con1->Write("\n");
  166. chomp($pas);
  167. return $pas;
  168. }

  169. 转发此代码,请注明出处...Kevin

复制代码
 楼主| 发表于 2005-3-23 17:48:59 | 显示全部楼层
把.txt后缀去掉...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-18 23:03:31 | 显示全部楼层
1.了解gpg
加密和数字签名作为保护信息机密性、完整性和不可抵赖性
其中开放源代码库中最被认可的是GPG(GNU Privacy Guard)
GPG的密钥采用的是信任机制,默认下并没有一个中心的PKI
( PKI是“Public Key Infrastructure”的缩写)意为“公钥基础设施”,
为了防止公钥欺骗,保证公钥的不可否认性(Non-repudiation),
需要有一种机制来进行管理,来帮助发布和验证GPG用户的公钥。
所以查找到了pks(OpenPGP Public Key Server Commands)


1.了解 pks-0.9.6.tar.gz
第一步,下载pks 并安装 请自行下载如我的 pks-0.9.6.tar.gz
NAME
pksd - OpenPGP Public Key Server Daemon

tar -zxvf pks-0.9.6.tar.gz
./configure --prefix=/usr/local/
make
make install
/usr/local/pks-0.9.6/pksclient /usr/local/var/db create
nohup /usr/local/sbin/pksd /usr/local/etc/pksd.conf > /dev/null 2>&1 &
echo "nohup /usr/local/sbin/pksd /usr/local/etc/pksd.conf > /dev/null 2>&1 &" >> /etc/rc.d/rc.local

http://ipaddress:11371是可以访问安装就OK了.
它有两个作用
1.Extract a Key from the Server
2.Submit a Key to the Server
当然我们可以通过网页去查询到公钥,也可以发送给它.
不过因为gpg产生时我们用命令带变数故会用命令做查询和提交动作










我的目标是windows客户端通过网页上传文件等其它字段
让大家在网页上对其签名.公钥保存在linux server上.
更详细的请自行看README
[root@rhce pks-0.9.6]# netstat -an | grep 11371
tcp        0      0 0.0.0.0:11371               0.0.0.0:*                   LISTEN
tcp        0      0 192.168.7.223:11371         192.168.7.101:3821          TIME_WAIT
tcp        0      0 192.168.7.223:11371         192.168.7.101:3822          TIME_WAIT
lynx http://192.168.7.223:11371可见如下
OpenPGP Public Key Server Commands
Extract a Key from the Server
Submit a Key to the Server
...
...
即Ok
2.
有些動作我們是可以作成網頁要大家點擊的,但是我們先用手工?現.
其?我現在也還有點模糊,不過寫出?淼囊恍┣宄.因為已經有?施的案例了.哈哈
让windows客户端用gpg产生公钥...
          2.1請自行下載 gnupg-w32cli-1.2.1-1.zip
          2.2?姆掌饔胒tp方式去驗證簽名對照表和得到
          此表管理員去添加公鑰?K對其簽名.
       2.3gpg --gen-key 當然此過程也可以是由點擊網頁後開始運行的.
          2.4gpg --keyserver peter.riverstar.sir --send-keys 發送給pksd.
                此處用程式去做..具體稍候再補
3.
因為為了方便大家使用,不然技術不能運用到?際推?V那就是不好玩了
     我們要做一個簡單的網頁如
公告
新增公告內容,第幾號公告,日期時間.核准主管.上傳附件.    這幾個欄位..不夠自行進行補充.
為了便於今後變成pdf檔,和對其簽名.所以這些內容暫時?K沒有計?填入到mysql裏.而是會以
文件的形式存放在http服務的相應目錄




www_readonly 0
别忘记改etc/pksd.conf

否则--send-keys是不可以的.












有空接着具体点写
回复 支持 反对

使用道具 举报

发表于 2005-8-23 22:21:11 | 显示全部楼层
楼主写个电子签名是虾米东西?
我知道的是PKI体系里说到的电子签名。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-8-25 11:02:09 | 显示全部楼层
能不能画个流程图阿, 看起来方便.
回复 支持 反对

使用道具 举报

发表于 2005-8-25 14:22:24 | 显示全部楼层
楼主是台湾的么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表