【问题标题】:Compatible encryption between C# and PHP, ColdFusion, Ruby, PythonC# 与 PHP、ColdFusion、Ruby、Python 之间的兼容加密
【发布时间】:2010-09-11 06:38:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: scala c# php ruby encryption


    【解决方案1】:

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

    但是,请记住,在“没有双向通信”的情况下,您必须找到一种通道外的方法来安全地将对称密钥提供给加密方。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          Ed Haber said

          我会为批量数据使用 AES 加密和 RSA 用于加密 AES 密钥。如果数据足够小 然后只需用 RSA。

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

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

          【讨论】:

            【解决方案5】:

            您可以非常轻松地实现自己的基于 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;
            }
            

            【讨论】:

              【解决方案6】:

              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

              【讨论】:

                【解决方案7】:

                听起来 RSA 是适合您的算法。

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    猜你喜欢
                    • 2011-01-06
                    • 1970-01-01
                    • 2019-12-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-04-23
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多