當前正在尋找一種用於生成安全AES密鑰的面向用戶輸入的方法。該應用程序將成爲一個控制檯應用程序,它通過複製隨機生成的文本字符串來獲取用戶輸入,其中考慮按鍵間隔時間以生成隨機AES密鑰。我有什麼辦法可以做到這一點?控制檯應用程序中的Java KeyListener
2
A
回答
1
似乎沒有便攜的方式。您需要讀取單個字符,該字符默認情況下未啓用,即使使用Console
類也是如此。通常,Java只讀入整行。 Here's the question of how to get around that.摘要:將控制檯敲入原始模式。
假設你是在UNIX系統上,這個工作(在OSX測試):
import java.io.Console;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
String[] cmd = {"/bin/sh", "-c", "stty raw </dev/tty"};
Runtime.getRuntime().exec(cmd).waitFor();
Console console = System.console();
Reader reader = console.reader();
ArrayList<Long> timeStamps = new ArrayList<Long>();
StringBuilder password = new StringBuilder();
timeStamps.add(System.currentTimeMillis());
System.out.println("Enter your 8 character password");
for(int i = 0;i<8;i++) {
password.append(reader.read());
timeStamps.add(System.currentTimeMillis());
}
System.out.println("Timestamps: ");
System.out.println(timeStamps);
cmd = new String[] {"/bin/sh", "-c", "stty sane </dev/tty"};
Runtime.getRuntime().exec(cmd).waitFor();
}
}
1
不是一個真正的回答你的問題,但沒有任何理由KeyGenerator
將不適合你的目的是什麼?
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256, SecureRandom.getInstance("SHA1PRNG"));
0
也許是很愚蠢的答案,但可以用輸入鍵替換「任意鍵」嗎?在這種情況下,您可以使用讀線的準確時間和抖動來代替單獨的字符。您可以使用System.nanoTime()來 - 可能 - 添加一些熵。請注意,雖然通常這樣的方案會給你一些熵,但它足夠JVM,操作系統和機器相關,不能在現場使用它。
0
JLine可能會有所幫助。該庫有一些本機代碼,但可以在不同的平臺上工作,並且可以從控制檯讀取單個字符。
相關問題
- 1. 在Java控制檯應用程序中執行KeyListener
- 2. 你可以在java控制檯應用程序中使用keylistener嗎?
- 3. Java控制檯應用程序清理
- 4. Java控制檯應用程序
- 5. Interruptable Java控制檯應用程序
- 6. Java控制檯應用程序鎖定
- 7. 我如何製作一個實現KeyListener的控制檯應用程序?
- 8. 認識到Java的掃描儀或控制檯應用程序
- 9. 控制檯應用程序中的HttpContext
- 10. 控制檯應用程序中的System.Drawing.Color
- 11. C++應用程序中的控制檯
- 12. 控制檯應用程序中的iframe
- 13. 控制檯應用程序中的WriteableBitmapEx?
- 14. 控制檯應用程序中的ConfigurationErrorsException
- 15. Java中的控制檯應用程序中的Unicode輸入
- 16. 基於測試控制檯的應用程序/程序 - Java
- 17. Java控制檯程序
- 18. 從其他控制檯應用程序運行控制檯應用程序
- 19. 從控制檯應用程序啓動控制檯應用程序
- 20. TIdTCPServer.OnExecute在控制檯應用程序中
- 21. C#控制檯應用程序中斷?
- 22. 將Java控制檯程序轉換爲Web應用程序
- 23. Java EE應用程序中的rails控制檯
- 24. Java控制檯,GUI和Android應用程序中的MVC
- 25. .Net無法啓動控制檯的控制檯應用程序
- 26. 在java控制檯應用程序中使用hibernate
- 27. 使用netbeans在Java中創建控制檯應用程序?
- 28. 基於控制檯的應用程序到基於Java的GUI應用程序
- 29. 我如何從java控制檯運行控制檯應用程序?
- 30. Qt控制檯應用程序教程?
你真的需要這種熵源嗎?你不能只問用戶必要的種子,或者只是從系統的隨機數發生器中獲取它們? – hugomg