免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: rubyish
打印 上一主题 下一主题

【练习】 Playfair 密码 - 加密解密 [复制链接]

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
11 [报告]
发表于 2013-06-19 17:41 |只看该作者
回复 9# picbhan


    example:
  1. my $K = 'playfair example';
  2. my $S = 'Hide the gold in the tree stump';
  3. my $C = 'HI DE TH EG OL DI NT HE TR EX ES TU MP';
  4. my $D = 'BM OD ZB XD NA BE KU DM UI XM MO UV IF';

  5. say '加密 OK ' if $D eq PL( $K, $S, 'en' );
  6. say '解密 OK ' if $C eq PL( $K, $D, 'de' );
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
12 [报告]
发表于 2013-06-23 18:03 |只看该作者
my 代码:
  1. #!/usr/bin/perl
  2. use 5.018;
  3. sub playfair {
  4.     my ( $k, $s, $ed ) = @_;
  5.     my ( @I, %T, @R )  = 0 .. 4;
  6.     map tr/j/i/, $k, $s;
  7.     my $J = ( $ed //= 'e' ) eq 'd' ? -1 : 1;
  8.     my @K = map uc, map /([A-Za-z])/g, $k;
  9.     my @S = map uc, map /([A-Za-z])/g, $s;
  10.     @K = grep !$T{$_}++, @K, 'A' .. 'I', 'K' .. 'Z';
  11.     %T = map { my $i = $_; map { shift @K, [ $i, $_ ] } @I } @I;
  12.     my %E = map { join( '', @{ $T{$_} } ), $_ } keys %T;

  13.     while ( my ( $A, $B ) = splice @S, 0, 2 ) {
  14.         ( $B, @S ) = ( 'X', $A, @S ) if $A eq ( $B //= 'X' );
  15.         push @R, $T{$A}[0] == $T{$B}[0]
  16.           ? [ map $E{ $T{$_}[0] . ( $T{$_}[1] + $J ) % 5 }, $A, $B ]
  17.           : $T{$A}[1] == $T{$B}[1]
  18.           ? [ map $E{ ( $T{$_}[0] + $J ) % 5 . $T{$_}[1] }, $A, $B ]
  19.           : [ $E{"$T{$A}[0]$T{$B}[1]"}, $E{"$T{$B}[0]$T{$A}[1]"} ];
  20.     }
  21.     join $", map join( '', @$_ ), @R;
  22. }

  23. my $key  = 'Playfair example';
  24. my $test = 'Hide the gold in...the TREESTUMP!!!';
  25. say my $t = playfair $key, $test;
  26. say playfair $key, $t, 'd';
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
13 [报告]
发表于 2013-06-23 18:04 |只看该作者
大家积极参与技术交流。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
14 [报告]
发表于 2013-06-23 19:23 |只看该作者
首先,我的代码是偷的,偷picbhan的代码。
技术交流 = 偷代码 + 化为己有。

鼓励大家积极参与技术交流
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP