C#和PHP,ColdFusion,Ruby,Python之间的兼容加密

我们正在开发一种接受POST请求的服务。 一些POST数据需要在POST之前加密,因为它将存储在表单上的隐藏字段中。

该应用程序是用C#编写的,但我们希望第三方客户能够轻松地与它集成。 我们发现大多数客户使用PHP,Classic ASP或VB.Net。

第三方应该只进行加密。 我们做解密。 没有双向沟通。

什么是最兼容的加密算法,填充模式和其他选项的组合?

假设您有一种安全的方式来共享密钥(无论是RSA加密,通过SSH或HTTPS链接检索,还是在安全电话线上调用其他开发人员),任何主要的现代加密(如AES,如上所述)通过@Ed Haber)是合适的。 我会提出他的AES建议。 应该有PHP,VB,Ruby等的库。

但是,请记住,通过“无双向通信”,您将不得不找到一种用于安全地将对称密钥加密到加密方的信道外方法。

如果您的意思是第三方不可能解密数据,那么您将需要使用非对称加密算法,例如RSA。 这将是第三方使用您的公钥加密数据,然后只有您可以使用您未公开的私钥解密数据。 应该为您提到的所有语言提供RSA实现。

如果您不在乎第三方是否可以解密数据,那么AES就是您的选择。 您将拥有一个与第三方共享的密钥。 该密钥用于加密和解密。

我会使用AES进行批量数据加密,使用RSA进行加密AES密钥。 如果数据足够小,那么只需用RSA加密整个数据。

埃德哈伯说

我会使用AES进行批量数据加密,使用RSA进行加密AES密钥。 如果数据足够小,那么只需用RSA加密整个数据。

我认为这是一个很好的解决方案。 我要做的是让您的应用程序发布用于获取公共RSA密钥的API。 当我第三方想要发送给你的东西时,它会得到公钥。 然后它生成一个会话密钥,使用分组密码(即AES)进行实际加密,并通过使用您的公钥加密将密钥发送给您。 您使用私钥解密会话密钥。 然后,第三方使用AES(使用您也发布的填充方案)加密要发送给您的数据并将其发送给您。 您使用会话密钥解密它。

上述方法存在一些问题。 由于您没有发送任何信息(除了发布您的公钥之外,您无法控制会话密钥的生成方式。这意味着第三方可以使用非常不安全的方式生成会话密钥,而您永远不会知道。第二个问题每个想要发送数据的人都必须像你一样填写AES的数据。所以你必须确保每个人的协调。第二个问题不是很大,但第一个问题可能是一个问题特别是如果你不信任第三方那么多,从一个好的加密安全随机数生成器生成真正好的会话密钥

您可以非常轻松地实现自己的基于XOR密钥的位加密。 通过一点思考和独创性,您可以提出一些非常适合您应用的东西。

这是一个PHP示例:

 function XOREncryption($InputString, $KeyPhrase){ $KeyPhraseLength = strlen($KeyPhrase); for ($i = 0; $i < strlen($InputString); $i++){ $rPos = $i % $KeyPhraseLength; $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]); $InputString[$i] = chr($r); } return $InputString; } 

ColdFusion具有加密和解密function,能够处理一系列算法和编码,包括上面推荐的AES。

信息: http : //www.cfquickdocs.com/cf8/?getDoc = encrypt#Encrypt

快速示例代码:

 Key = generateSecretKey( 'AES' , 128 ) EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' ) Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' ) 

此库为PHP提供了类似的function:
http://www.chilkatsoft.com/p/php_aes.asp

……以及Java,Python,Ruby和其他……
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

听起来像RSA是你的算法。

为什么不通过HTTPS公开您的服务器? 这样,任何可以处理HTTPS的客户端都可以安全地使用该服务。