2011-05-05 60 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); 
}