代码之家  ›  专栏  ›  技术社区  ›  Paul Shannon

c和php、coldfusion、ruby、python之间的兼容加密

  •  7
  • Paul Shannon  · 技术社区  · 17 年前

    我们正在开发一种可以接受 POST 请求。一些 数据需要在 因为它将存储在表单的隐藏字段中。

    应用程序是用C语言编写的,但我们希望第三方客户能够轻松地与之集成。我们发现大多数客户机都使用PHP、经典ASP或VB.NET。

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

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

    8 回复  |  直到 17 年前
        1
  •  4
  •   Ben Doom    17 年前

    假设您有一种安全的方式来共享密钥(无论是RSA加密、通过ssh或https链接进行检索,还是通过安全电话线呼叫其他开发人员),那么任何主要的现代加密(如@ed haber提到的aes)都是合适的。我会附议他的爱神建议。应该有PHP、VB、Ruby等库。

    但是,请记住,如果没有“双向通信”,则必须找到一种通道外方法,以便安全地获取加密方的对称密钥。

        2
  •  3
  •   Chris Kite    17 年前

    如果您的意思是第三方不可能解密数据,那么您将希望使用非对称加密算法,如RSA。这将是第三方用您的公钥加密数据,然后只有您才能用您的私钥解密数据,而您不能公开这些数据。对于您提到的所有语言,都应该有RSA的实现。

    如果您不关心第三方是否可以解密数据,那么AES就是解决问题的方法。您将拥有一把与第三方共享的钥匙。此密钥用于加密和解密。

        3
  •  2
  •   Ed Haber    17 年前

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

        4
  •  2
  •   Community Mohan Dere    9 年前

    Ed Haber said

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

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

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

        5
  •  1
  •   Ian P    17 年前

    您可以非常容易地实现自己的基于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
  •  1
  •   Peter Boughton    17 年前

    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
  •  0
  •   Will    17 年前

    听起来RSA是你的算法。

        8
  •  0
  •   thenickdude Antwan van Houdt    17 年前

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

    推荐文章