這陣子剛好在處理這個問題,解法蠻特別,想說就把它記錄下來好了。
案主希望我能夠做一個 Java 軟體,具有登入功能,而且是本地端的登入功能,當登入一次之後就不用再輸入密碼登入了,而且把登入之後的檔案 copy 到別台電腦之後仍然要重複登入才可以使用,該如何辦呢?
不能幫他寫一個後端的登入系統來解(因為希望是本地端,不希望多花錢買一台 server),而我自己的解法如下,去拿到該台電腦的 MAC 位址,並且跟登入的那組密碼做 hash ,之後把這個值存到本地端的某個 keyfile,每次執行該程式,就去抓出該特定檔案是否有這串 key 值?驗證是否是對的?
因為每一台電腦的 MAC 位址是獨特的,相當適合用來辨識是否是該台電腦,但在抓取 MAC 位址的時候,又會遇到一個問題,當我連著 wifi、藍芽等等裝置的時候,會抓到多個 MAC 位址,所以需要把所有的 MAC 位址都記錄下來。
以下是參考的 code:
Enumeration<NetworkInterface> networks;
try {
networks = NetworkInterface.getNetworkInterfaces();
NetworkInterface inter;
while (networks.hasMoreElements()) {
inter = networks.nextElement();
byte[] mac = inter.getHardwareAddress();
if (mac != null) {
String addr = "";
for (int i = 0; i < mac.length; i++) {
addr += String.format("%02X", mac[i]);
}
addrs.add(addr);
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
一開始在做的時候,單純只有抓取 MAC 位址的第一項,在嘗試斷網跟連著 wifi 的時候發現出了問題,而連著 wifi 時,也因為關機又開機了之後重連 wifi 而有了差別,於是乾脆把所有抓得到的 MAC 位址都對過一遍。