我们正在开发一种接受 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对整个事物进行加密。

Ed Haber说

  

我会将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 =加密#加密

快速示例代码:

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的客户端都可以安全地使用该服务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top