java文件md5
1. java 算文件的MD5值是怎麼用十六進製表示的
&這個是位運算「且」
sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
//(b[i] & 0xf0)這個意思就是取b[i]的後4位
「>>> 無符號右移」
sb.append(hexChar[b[i] & 0x0f]);
//這個意思就是取b[i]的前4位
2. java多個文件怎麼生成一個md5
這里定義了一些基本的變數與靜態對象,並指定採用的方式是「md5「,下張圖為定義了一個方法,方法的參數是接收一個文件File對象,並且返回該文件生成的」md5「值。
這里定義了一個轉化方法,把文件或文件流以位元組的方式進行轉換,使之生成唯一的md5,此方法間接的應用到了md5的生成中。
這里主要定義了一個根據提供的文件流輸入流InputStream進行生成md5的值,如上幾幅圖中的代碼加在一起就是完整的文件或文件流的md5值生成方法。
4
最後一張圖片為最終生成後的效果,文件上傳的時候可以先生成md5的值後到資料庫中進行查找,如果找到了就說明相同的文件已經存在,那麼就不應該再保存了,否則會出現相同的冗餘文件。
3. JAVA的md5解密後怎麼是亂碼,問題出在哪裡
MD5是單向加密的,不管何種數據進行MD5加密都會得到固定長度的字元串,
MD5一般用戶文件完整性的校驗,也有用來做密碼加密的。
想要破解MD5,因其本身的演算法不可逆,故只能使用窮舉法,也就是不斷拼字元串加密和已知的MD5字元串進行比對,這是一個相當大的工程,需要龐大的數據基礎。
4. java 獲取1G文件md5 要多久
我使用了部分取值的方式來提高MD5的計算速度,這樣的時候,時間主要耗費在了IO中。如果是100K(換成500K也並沒有提高執行的速度)取一個字元計算大約10秒以內。但是如果全部讀取可能要60秒或者更多。對於大文件建議使用一些文件相關信息和部分文件內容做MD5.比如用文件長度和一定間隔取一些位元組。
5. java文件md5值 什麼意思
MD5是常用的一種加密方式,原數據加過加密演算法後的得到的數據就是MD5值
用戶的密碼很多是以MD5值(或類似的其它演算法)的方式保存的,這樣即使資料庫被侵入,也不能直接得到用戶的原始密碼
6. Java,如何獲取文件的MD5值
package cdm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.*;
import org.apache.commons.io.IOUtils;
public class testMD5 {
public static String getMd5ByFile(File file) throws FileNotFoundException {
String value = null;
FileInputStream in = new FileInputStream(file);
try {
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return value;
}
public static void main(String[] args) throws IOException {
String path="E:\文件.zip";
String v = getMd5ByFile(new File(path));
System.out.println("MD5:"+v.toUpperCase());
FileInputStream fis= new FileInputStream(path);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
//System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
}
}
7. Java計算md5時欄位格式有影響嗎
Java中使用MD5演算法計算消息摘要時,輸入字元串的格式是有影響的。為了得到正確的結果,你需要確保輸入字元串的格式符合一定的要求。比如,如果你使用了多餘的空格或其他非法字元,那麼你得到的消息摘要可能會與預期不符。
需要注意的是,不同的編碼方式可能會導致相同的字元串在計算消息摘要時得到不同的結果。因此,在使用Java的MD5演算法時,你應該確保輸入字元串的編碼方式與你預期的一致。
總之,在Java中使用MD5演算法時,輸入字元串的格式是有影響的,你需要注意字元串的格式以及編碼方式,以確保得到正確的結果。
回答不易,望請採納
8. java MD5 對應的C#方法
在vb.net裡面,可以這樣算文件的MD5值,你用工具轉換過來就有C#的代碼了。
PrivateFunctionGetFileMD5(fileNameAsString)AsString
DimhashValueAsByte()
DimsbAsNewStringBuilder()
Try
DimfileStreamAsNewFileStream(fileName,FileMode.Open,FileAccess.Read,FileShare.Read,4096,True)
Usingmd5=NewSystem.Security.Cryptography.MD5CryptoServiceProvider()
hashValue=md5.ComputeHash(fileStream)
EndUsing
DimiAsInteger=0
sb.Capacity=hashValue.Length*2
Whilei<hashValue.Length
sb.Append(hashValue(i).ToString("x2"))
i+=1
EndWhile
CatchexAsException
Throw
EndTry
Returnsb.ToString()
EndFunction
運行結果
小文件
以上代碼小文件(十幾K)、大文件(幾G)都測試過
9. java比較2個文件是否是相同的文件,是一個一個位元組比較還是計算MD5比較好啊
不同內容得出相同MD5值,雖然概率低,但總是不放心。如果在已知文件編碼范圍的條件下,找到MD5絕對區分長度范圍(即:該范圍內取樣內容的MD5相同的,內容保證相同;絕不存在不同內容得出相同MD5值的現象),那麼,可按合理的長度分片、按一定順序遍歷整個文件(屬性信息、頭部、尾部、同步隨機點、其他),比較MD5,一旦有異立即判定文件不同,終止比較。這種分片取樣比較MD5的思路可能快於逐位元組比較也絕對可信
要確保 100%正確就必須校驗全文,通過以上思路來比較,即是。
(註:
其他據說相對於MD5來講不易碰撞(即不同內容得出相同MD5值的概率可能更低)的演算法推薦:起碼 SHA1 ,最好 SHA256、 SHA512、MD5+CRC32、HMAC,或者幾種不同類型演算法的同步進行。
在精通演算法的情況下,將這里推薦的演算法取代上文中提到的MD5來考量,能擴大絕對區分長度范圍,可能更方便更快的比較。
但是又有這樣的考慮:逐位元組比較的演算法最簡單,演算法弄復雜了反而會增加額余的時間;逐位元組比較的演算法也可以放到上文中來考量,進行同步取樣和各種遍歷的順序與方式,說不定,在保證100%的可信度的條件下,逐字比較反而最快呢?
我覺得時間的耗費關鍵處在於,所有的演算法,都要將兩個位於不同區域或載體的文件的同位區域收集到一起進行比較,這個收集花費時間Ta(i),與取樣長度、存儲區域或載體等相關;{如果要將文件取很大一部或全部讀入內存,然後再逐一集中比較,則會減小以上的Ta(i),而增加一個額外讀入的時間Tc(i)*次數M(i)}。比較的次數大致為N(i);而如果在一個文件中順序讀取一個區域並且計算它的某個整體評定值,這個花費的時間為Tb(i),與取樣長度、計算程序、設備性能等相關。
總體的比較時間大致是Ta(i)*N(i)*Tb(i)+{Tc(i)*M(i)}
逐位元組比較,其中Tb(i)、Ta(i)都是最短的,但是N(i)最大,
總之,可以設計不同的演算法,通過實際環境和文件的檢測,來決定採用何種演算法。
)
外一則:
兩個取樣內容, MD5等演算法的計算值 不同,則內容一定不同; 計算值相同,則 內容可能相同,但可能性是否達到100%,內容相同的概率是多少,根據編碼范圍、演算法來確定。如果是比較一個文件和許多其他文件是否相同,並且提前知道其他文件的 MD5 值,可先比較 MD5 值可以大大提高文件比較的速度。
10. Java MD5如何解密
MD5 不能解密, MD5的破解方式就是 把不同的字元串按MD5加密 然後對比加密後的結果是不是一樣. 在線MD5解密 也是這樣的原理.