双密钥加密算法


Two key crypting algorithm

有什么安全的加密算法可以用这种方式吗?

<?php
   $message="Hi there!";
   $key1="ablablabla";
   $key2="fooboomoohoo";
   $tmp=encrypt($message,$key1);
   $tmp=encrypt($tmp,$key2);
   $tmp=decrypt($tmp,$key1);
   $result=decrypt($tmp,$key2);
   echo "'"".$message."'" is the same as '"".$result."'"";
?>

它应该这样工作:

  1. 用户想向服务器发送加密消息,所以他用他的密钥对其进行加密

  2. 服务器收到一条加密的消息,所以他用自己的密钥再次加密,并将其发送回

  3. 用户用密钥解密消息并将其发送回

  4. 最后,服务器解码消息

像RC4这样的流密码呢?

加密和解密涉及与PRNG的输出进行XOR。(实际上解密和加密是一样的。)

$tmp=encrypt($message,$key1); // tmp = P ^ A
$tmp=encrypt($tmp,$key2);     // tmp = p ^ A ^ B
$tmp=decrypt($tmp,$key1);     // tmp = p ^ A ^ B ^ A = p ^ B
$result=decrypt($tmp,$key2);  // result = p ^ B ^ B = p

您似乎在询问是否存在具有交换密钥的加密方案。例如,请参阅这个stackoverflow问题。

当然存在这样的交换系统。一个简单的例子是Caesar Cypher(即将字母表中的字母移动n位置,其中n是键)。就safe方案而言——这里的safe相当主观——密钥的交换性质确实存在于更复杂的层面上。这里可以看到这样一个例子,它讨论了为什么RSA对公共n是交换的。(注意:普通n不常见。)