2011-05-05 58 views
0

我必须通过套接字发送一个从ANSI C应用程序到Java应用程序的简短字符串 - 已经完成。因为它的重要数据,我必须使用密码“abc123”来加密它。我该如何以最简单的方式做到这一点?在ANSI C中加密,在Java中解密

+5

你想要简单性还是安全性? – 2011-05-05 15:40:00

+0

最简单的可能只是XORing ...安全与您挑选的密码系统。 – soandos 2011-05-05 15:47:39

+0

你可以在每个字节上执行'~'。简单但不安全。 – 2011-05-05 15:48:29

回答

1

通过“套接字”我假设你的意思是TCP/IP连接。在这种情况下,您应该考虑使用安全套接字层(SSL)。 SSL几乎可以解决与通过线路发送数据相关的大部分安全问题。唯一需要解决的是如何将密钥分发到管道的每一端。

我强烈建议您不要推出自己的系统。 Crypto很难正确使用,因此请使用现有的经过良好测试的实现。

如果你正在谈论一个Unix域套接字,那么你可能不需要打扰加密,因为域套接字只是进程间管道。

1

如上所述,它很大程度上取决于您想要的安全性,明智的答案是找到相同密码系统的Java和C实现并使用它们。

如果您愿意接受通常伴随家庭酿造的低安全性,我认为您在问题中采用“最简单的方式”,并假设两端的源代码和运行时都是安全的。 I.E.您只需要担心被截获的传输中的数据。您可以使用您希望的任何密码作为伪随机数生成器的种子(剩余部分通过字节索引或类似的方法划分大质数),并将数据字节与生成的随机数异或。不是最安全的,但会很快实施。

uint8_t encrypt(uint8_t iData, size_t iPos) { 
    // Super large prime, our 'password', best kept super secret 
    const uint64_t iSeed = 32416190071; 
    // Mostly to stop divide by zero 
    // Also starting in the obvious place gives more info on the prime 
    const size_t iOffset = 10; 

    uint8_t iPad = iSeed % (iPos + iOffset); 

    return iPad^iData; 
} 
+0

您必须确保您的PRNG在Java和C之间也一样。 – 2011-05-05 17:19:08

0
Char encrypt(char ch) { 
Return (ch ^0x55); 
}