我们正在开发一种可以接受POST
请求的服务。一些POST
数据需要先加密,POST
因为它将存储在表单的隐藏字段中。
该应用程序是用 C# 编写的,但我们希望第三方客户端能够轻松与其集成。我们发现大多数客户端使用 PHP、Classic ASP 或 VB.Net。
第三方应该只进行加密。我们会做解密。没有双向沟通。
加密算法、填充模式和其他选项的最兼容组合是什么?
我们正在开发一种可以接受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 具有加密和解密功能,能够处理一系列算法和编码,包括上面推荐的 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提供了类似的功能: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 的客户端都可以安全地使用该服务。