2017-05-03 77 views
0

我正在嘗試使用MD5加密文件。以下列出的是我的代碼。斯卡拉 - 爲什麼我不能使用MD5加密文件?

import java.security.MessageDigest 
import scala.io.Source 
import java.io.PrintWriter 
import java.io.File 

    object MD5 { 
     def md5(file: String)= { 
     val text=Source.fromFile(file) 
     val s=text.mkString 
     val hash = MessageDigest.getInstance("MD5").digest(s.getBytes) 
     hash.map("%02x".format(_)).mkString 
     } 

    def main(args:Array[String])={ 
     val cipher=md5("InputFile") 
     val pw = new PrintWriter(new File("OutputFile")) 
     pw.write(cipher) 
     pw.close 
     }} 

不管我INPUTFILE有多大,該OUTPUTFILE似乎總是相同的尺寸(大約10字節)。哪裏出了問題?有人能幫我弄清楚嗎?

+4

MD5不是一個加密算法,但哈希算法...... –

+0

@CyrilleCorpet這就是說,我們不能用MD5加密文件? –

+1

您可以使用MD5獲取哈希碼,但不能獲取您以後可以解密的文件的加密版本。那麼,你實際上*想要做什麼 - 計算文件的MD5散列值,或者對文件進行加密,以便以後解密它?如果你想加密文件,你需要的不是MD5。 – Jesper

回答

4

通過「ecnryption」,人們通常意味着數據的這種轉換,使得具有適當「祕密數據」的人可以反轉該轉換。

"Hash function"另一方面根據定義是非獨特的可重複變換,它將仲裁數據轉換爲固定大小的「散列」。 MD5是一箇舊的cryptographic hash function,這意味着這是一個「散列函數」,具有額外的與密碼相關的屬性(例如很難找到碰撞)。旁註:MD5已經足夠大,不再被認爲是密碼強大的。 MD5的典型當前用途是驗證數據完整性。

所以,是的,MD5是用來加密的錯誤的東西。如果你想加密,看看AES ciphers