用ANSI C加密,用Java解密

用ANSI C加密,用Java解密,java,c,encryption,Java,C,Encryption,我必须通过套接字将一个短字符串从ANSIC应用程序发送到Java应用程序——已经完成了。因为它的重要数据,我必须使用像“abc123”这样的密码对它进行加密。我应该如何以最简单的方式实现它?正如前面提到的,这在很大程度上取决于您希望它的安全程度,明智的答案是找到相同密码系统的Java和C实现并使用它们 如果你愿意接受家庭酿造这些东西通常会带来的较低的安全性,我假设你在你的问题中是“最简单的方式”,并且假设两端的源代码和运行时都是安全的。也就是说,您只需要担心传输中的数据被截获。您可以使用您想要的

我必须通过套接字将一个短字符串从ANSIC应用程序发送到Java应用程序——已经完成了。因为它的重要数据,我必须使用像“abc123”这样的密码对它进行加密。我应该如何以最简单的方式实现它?

正如前面提到的,这在很大程度上取决于您希望它的安全程度,明智的答案是找到相同密码系统的Java和C实现并使用它们

如果你愿意接受家庭酿造这些东西通常会带来的较低的安全性,我假设你在你的问题中是“最简单的方式”,并且假设两端的源代码和运行时都是安全的。也就是说,您只需要担心传输中的数据被截获。您可以使用您想要的任何密码作为伪随机数生成器的种子(大素数除以字节索引或类似值的剩余部分),并将数据字节与生成的随机数进行异或运算。虽然不是最安全的,但实施起来会很快

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;
}
我假设你说的“套接字”是指TCP/IP连接。在这种情况下,您应该考虑使用安全套接字层(SSL)。SSL几乎解决了大多数与通过网络发送数据相关的安全问题。您需要解决的唯一问题是如何将关键帧分发到管道的每一端

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


如果您谈论的是Unix域套接字,那么您可能不需要担心加密,因为域套接字只是进程间管道。

您想要简单还是安全?最简单的可能只是XORing。。。安全性取决于你选择的密码系统。你可以对每个字节执行
~
。简单,但不安全。@Athabaska Dick:散列函数与加密函数不同。出于某种原因,我只是假设在这种情况下,通过套接字发送密码用于密码身份验证。知道为什么密码必须通过套接字发送到另一个类似的应用程序会更有用。听起来是个糟糕的解决方案。你必须确保你的PRNG在Java和C之间也是一样的。
Char encrypt(char ch) {
 Return (ch ^0x55);
}