Php 有傅里叶密码这样的东西吗?

Php 有傅里叶密码这样的东西吗?,php,encryption,Php,Encryption,我创建了一种基于傅里叶变换概念的字母密码,其中每个字符都是根据它(在字母表中)与前一个字符的距离来定义的: function fourier_cipher($text) { $letters = array(1=>'a', 2=>'b', 3=>'c', 4=>'d', 5=>'e', 6=>'f', 7=>'g', 8=>'h', 9=>'i', 10=>'j', 11=>'k', 12=>'l', 13=>

我创建了一种基于傅里叶变换概念的字母密码,其中每个字符都是根据它(在字母表中)与前一个字符的距离来定义的:

function fourier_cipher($text) {

   $letters = array(1=>'a', 2=>'b', 3=>'c', 4=>'d', 5=>'e', 6=>'f', 7=>'g', 8=>'h', 9=>'i', 10=>'j', 11=>'k', 12=>'l', 13=>'m', 14=>'n', 15=>'o', 16=>'p', 17=>'q', 18=>'r', 19=>'s', 20=>'t', 21=>'u', 22=>'v', 23=>'w', 24=>'x', 25=>'y', 26=>'z');

   $chars = str_split($text);

   $prev_number = 0;
   $prev_difference = 0;

   for ($i=0; $i<count($chars); $i++) {
      $letter = $chars[$i];
      $number = array_search($letter,$letters);
      if ($number) {
         $difference = ($prev_difference > 13) ? 26 - abs($number - $prev_number) : abs($number - $prev_number);
         $code[$i] = $letters[$difference];
         $prev_number = $number;
         $prev_difference = $difference;
      }
      else {
         $code[$i] = $letter;
      }

   }

   return implode($code);

}
我对密码知之甚少,所以我假设这类事情以前就做过


我很好奇:这种类型的密码有名字吗?与其他技术相比,它有多容易破译?

看起来更像维格纳。至少对我来说是这样。我会尝试用弗里德曼-卡帕测试来打破这一局面:找出与目标语言中出现频率相关的字母间隔频率。我还是不明白这和傅里叶有什么关系


编辑:参见注释

它被称为“增量”密码或增量编码。看

手动操作有点乏味。:)虽然几年前有在线解码器/编码器,但现在似乎还没有


绝对不是Vigenene,而且它比Vigenene更容易破解(如果Vigenene关键字未知)。

必须有一种较短的方法来获取
字母数组。是的,可能也可以使用str_split函数。但我只是懒散地抓住了我所拥有的。是的,谢谢——我已经纠正了。@SLaks$letter=range('a','z')@jpwco:
$letter=array_combine(范围(1,26),范围('a','z'))。我不认为它可以归类为Vigenere,它(据我所知)根本没有处理字母之间的差异(就字母表中的字符数而言)。我提到傅里叶变换是因为它们也基于相邻值之间的差异创建表示。你说得对。在这种情况下,它仍然是一个多字母密码。其中有很多,特别是与经典密码有关。这确实很有趣。我将遵循这条思路,如果没有,我会在周四早上问我的教授;)傅里叶变换在空间域和频率域之间进行变换。这更像是一种差分编码。你基本上是在计算字符串的离散导数,并用一个简单的代换来编码。并不是说你的密码不有趣,但我认为它与傅里叶变换无关。
$text = 'we hold these truths to be self evident';
echo fourier_cipher($text);
// outputs: wh cgch pnwln kbcalk ae mc nlgf aqmeaif