![](/img/trans.png)
[英]Send Multiple POST Requests Through a DataOutputStream in Java
[英]Send a Secret key over JAVA DataOutputStream
我正在開發使用對稱密鑰+ RSA的FTP工具。 我想通過數據輸出流將我的密鑰發送到服務器,該怎么做? 我嘗試跟隨
客戶:
SecretKey secretKey = en_de_cryptor.returnSecretKey();
String encodedKey = Base64.encode(secretKey.getEncoded());
dout.writeUTF(secretKey.toString());
服務器:
String secretKey = din.readUTF();
byte[] decodedKey = Base64.decode(secretKey);
但是我無法獲得解碼密鑰。 我該如何解決並在服務器端獲取密鑰。
正如大多數其他人指出的那樣,您遇到了一個問題,即您正在以明文形式發送不對稱密鑰的最重要部分,從而可以截獲秘密密鑰。 當然,您可以加密密鑰,但這會引入其他加密問題來解決。 如果使用對稱加密算法對密鑰進行加密,則需要解決密鑰協商問題。 雙方將如何以安全的方式就密鑰達成一致,以使第三方無法截取它?
在某種程度上,您正在解決SSL已經解決的問題。 為什么不只是使用它呢? SSL還經過了戰斗測試,安全專家已經使用了25年。 開發自己的版本意味着SSL開發人員可能會遇到類似的陷阱。
但是,如果必須重新實現,則將需要更改算法。 保護私鑰的最安全方法是永遠不要首先通過網絡發送私鑰。 非對稱加密使您可以在客戶端和服務器之間交換消息,而無需對稱算法存在密鑰協商問題。
這是一個可以解決關鍵一致性問題的算法:
即使您做到了這一點,您仍然可以接受中間攻擊 ,在這種情況下,當客戶端與客戶端和服務器交換消息時,第三方監聽程序可能會欺騙客戶端和服務器通過第三方發送未加密的數據。 這是一個簡單的示例,說明如何自己實施此操作可能導致您創建的安全性不僅僅使用SSL。
如果您確實發送了加密的有效載荷,則需要拋棄DataInputStream並使用直接的二進制流,因此您無需使用Base64Encoding將二進制有效載荷轉換為UTF字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.