2017-06-21 154 views
-3

當我嘗試創建文件並開始寫入該文件日誌顯示該文件已創建,但它不存在於已定義的位置和應用程序獲取crashed.it是崩潰時,我試圖寫入文件在while循環獲取錯誤空指針異常

Runnable runnable = new Runnable() { 
@Override 
public void run() { 
      BufferedWriter bw = null; 
      String line; 
     try { 
      File root = android.os.Environment.getExternalStorageDirectory(); 
      File dir = new File(root.getAbsolutePath() + "/Sniffing"); 
      dir.mkdirs(); 
      File file1 = new File(dir, "dump1.txt"); 
      System.out.println("*********############# File Created :- " + file1); 
      Process process = Runtime.getRuntime().exec(
             "logcat -v threadtime -s ServiceMode"); 
           int length = process.toString().length(); 

           System.out.println("Length" + length); 

           BufferedReader reader = new BufferedReader(
             new InputStreamReader(process.getInputStream())); 

           while ((line = reader.readLine()) != null) { 
            bw.write(line); 
            bw.newLine(); 
           } 

          } catch (IOException e) { 
           Log.d("Create file error",e.getMessage()); 
          } finally { 
           try { 
            if (bw != null) { 
             bw.close(); 
             Toast.makeText(getBaseContext(), 
               "Done writing both log and dump file", 
               Toast.LENGTH_SHORT).show(); 


            } 
           } catch (Exception e2) { 
            e2.printStackTrace(); 
           } 
          } 
         } 
        }; 
+1

信息文摘單向函數。您可以使用算法來計算消息摘要,但是如果能夠獲取原始字符串,則無法找到原始字符串,這意味着算法被破壞。事實上,這並不意味着數據的加密,而是保持數據的完整性,這意味着它用於驗證您的數據沒有被篡改。 –

+1

放棄,現在。這些算法的_point_是你不能這樣做的。這是你使用它們的_reason_。 –

+1

@MigratedPigeon:「解密加密數據是不可能的」 - Wot?只要你知道密鑰,加密的*整點就是你可以解密它。 「所有的加密算法,如MD5,SHA1,SHA256都是單向操作」 - 這些算法都不是加密算法。 –

回答

0

正如其他人指出的,你不能解密一個散列。哈希值用於驗證。

一般來說,以驗證密碼,您要做到以下幾點:
1)用戶創建一個密碼,並以純文本形式發送它(對像HTTPS加密通信)
2)服務器與用戶哈希它特定的鹽並將散列和鹽存儲在數據庫中。
3)當用戶想要再次登錄時,他們會向您發送純文本密碼。
4)服務器從數據庫加載保存的散列和鹽,散列給定的密碼並將其與保存的散列進行比較。如果哈希匹配,則登錄成功。

但是不要使用SHA進行密碼散列,請使用BCrypt。 BCrypt專爲密碼散列而設計,並自動密碼。

jBcrypt是一個Java實現Bcrypt的,它有用於創建和驗證密碼哈希以下三個功能:

String hashed = BCrypt.hashpw(password, BCrypt.gensalt()); 
BCrypt.checkpw(password, hashed); 
3

SHA512是散列算法,而不是加密算法。你只能解密加密的東西。你的數據沒有加密,它被散列。顛倒散列是不可能的。 (不難,不可行,不貴,不可能,從數學意義上說:你可以證明這是不可能的,證明也不難,三年級學生可以理解。)

+1

是的,你可以使用任何加密算法。但你不應該。你不應該以一種可以加密的方式存儲密碼。 –