文件上傳散列
A. 為什麼QQ郵箱的超大附件上傳的速度這么快
注意咯。。。。。。。。
這和網路好關系不是特別大,主要原因是騰訊伺服器里有和你上傳400M電影一樣的文件,所以在你上傳的時候,騰訊伺服器里搜索到了匹配的文件,所以你不到1秒就搞定了。
B. php 獲得上傳文件的MD5
if(isset($_FILES['multimedia']) && $_FILES['multimedia']['error']==0){$file_name = $_FILES['multimedia']['name'];$size = getimagesize($_FILES['multimedia']['tmp_name']); $type = $_FILES['multimedia']['type'];$original = $_FILES['multimedia']['tmp_name'];$md5 = md5_file($original);echo $md5;}
md5_file()
md5_file() 函數計算文件的 MD5 散列。md5() 函數使用 RSA 數據安全,包括 MD5 報文摘譯演算法。如果成功,則返回所計算的 MD5 散列,如果失敗,則返回 false。
語法:md5(string,raw)
參數string,必需。規定要計算的文件。
參數charlist,可選。規定十六進制或二進制輸出格式:TRUE - 原始 16 字元二進制格式;FALSE - 默認。32 字元十六進制數。
<?php$filename = "test.txt";$md5file = md5_file($filename);echo $md5file;?>
存儲 "test.txt" 文件的 MD5 散列:
<?php$md5file = md5_file("test.txt");file_put_contents("md5file.txt",$md5file);?>
在本例中,我們將檢測 "test.txt" 是否已被更改(即是否 MD5 散列已被更改):
<?php$md5file = file_get_contents("md5file.txt");if (md5_file("test.txt") == $md5file){echo "The file is ok.";}else{echo "The file has been changed.";}?>
輸出:
The file is ok.
C. 文件在上傳過程前,安全組件計算散列值失敗是什麼意思
需要把文件上傳頁面的網址添加到可信站點,具體操作步驟如下:
1、首先打開系統的internet選項卡。
D. 斷點中的hash是什麼意思
「斷點」是指斷點續傳嗎?
以下僅供參考:
使用HASH演算法實現文件的斷點續傳
一個已有的大文件,如何做到客戶端的快速下載。使用斷點續傳技術,充分利用網路帶寬和CPU。
思路:把大文件按照一定演算法分割成很多部分Part文件,用MD5演算法簽名做各個part部分的驗證值,客戶端下載後用同一個key對下載的part做MD5,結果一樣,就完成這一個part的下載,不一樣則丟掉繼續重新下載。最後下載完畢後再把各個part合並成大文件。對於下載情況,可以自己設計一個表結構來對每一個客戶端的下載進行維護。客戶端的文件的斷點續傳上傳也是一樣的思路。
Hash演算法到底有什麼用呢?
Hash演算法在信息安全方面的應用主要體現在以下的3個方面: 1) 文件校驗 我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。 MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。 2) 數字簽名 Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。 3) 鑒權協議 如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。編輯本段hash函數 - Hash演算法的用處Hash演算法在信息安全方面的應用主要體現在以下的3個方面: 1) 文件校驗 我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。 MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。 2) 數字簽名 Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。 3) 鑒權協議 如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。 以上就是一些關於hash以及其相關的一些基本預備知識。那麼在emule裡面他具體起到什麼作用呢?編輯本段hash函數 - userhash道理同上,當我們在第一次使用emule的時候,emule會自動生成一個值,這個值也是唯一的,它是我們在emule世界裡面的標志,只要你不卸載,不刪除config,你的userhash值也就永遠不變,積分制度就是通過這個值在起作用,emule裡面的積分保存,身份識別,都是使用這個值,而和你的id和你的用戶名無關,你隨便怎麼改這些東西,你的userhash值都是不變的,這也充分保證了公平性。其實他也是一個信息摘要,只不過保存的不是文件信息,而是我們每個人的信息。編輯本段hash函數 - hash文件我們經常在emule日誌裡面看到,emule正在hash文件,這里就是利用了hash演算法的文件校驗性這個功能了,文章前面已經說了一些這些功能,其實這部分是一個非常復雜的過程,目前在ftp,bt等軟體裡面都是用的這個基本原理,emule裡面是採用文件分塊傳輸,這樣傳輸的每一塊都要進行對比校驗,如果錯誤則要進行重新下載,這期間這些相關信息寫入met文件,直到整個任務完成,這個時候part文件進行重新命名,然後使用move命令,把它傳送到incoming文件裡面,然後met文件自動刪除,所以我們有的時候會遇到hash文件失敗,就是指的是met裡面的信息出了錯誤不能夠和part文件匹配,另外有的時候開機也要瘋狂hash,有兩種情況一種是你在第一次使用,這個時候要hash提取所有文件信息,還有一種情況就是上一次你非法關機,那麼這個時候就是要進行排錯校驗了。 關於hash的演算法研究,一直是信息科學裡面的一個前沿,尤其在網路技術普及的今天,他的重要性越來越突出,其實我們每天在網上進行的信息交流安全驗證,我們在使用的操作系統密鑰原理,裡面都有它的身影,特別對於那些研究信息安全有興趣的朋友,這更是一個打開信息世界的鑰匙,他在hack世界裡面也是一個研究的焦點.我是一個門外漢,利用這個周末找了一些資料,胡亂寫了一點關於hash的文章,也有不少是我自己的分析,這期間肯定還有不對的地方,還請朋友們多多指出錯誤,我拋磚引玉希望大家批評指導。
E. jQuery實現文件上傳。
java">/*jQuery實現文件上傳,參考例子如下:
packagecom.kinth.hddpt.file.action;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.ArrayList;
importjava.util.Calendar;
importjava.util.Enumeration;
importjava.util.Hashtable;
importjava.util.List;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importnet.sf.json.JSONArray;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.upload.FormFile;
importorg.hibernate.criterion.MatchMode;
importorg.hibernate.criterion.Order;
importorg.hibernate.criterion.Restrictions;
importcom.gdcn.bpaf.common.base.search.MyCriteria;
importcom.gdcn.bpaf.common.base.search.MyCriteriaFactory;
importcom.gdcn.bpaf.common.base.service.BaseService;
importcom.gdcn.bpaf.common.helper.PagerList;
importcom.gdcn.bpaf.common.helper.WebHelper;
importcom.gdcn.bpaf.common.taglib.SplitPage;
importcom.gdcn.bpaf.security.model.LogonVO;
importcom.gdcn.components.appauth.common.helper.DictionaryHelper;
importcom.kinth.common.base.action.BaseAction;
importcom.kinth.hddpt.file.action.form.FileCatalogForm;
importcom.kinth.hddpt.file.model.FileCatalog;
importcom.kinth.hddpt.file.service.FileCatalogService;
importcom.kinth.hddpt.file.util.MyZTreeNode;
/**
*<p>
*description:「文件上傳的Struts層請求處理類」
*</p>
*@date:2013-1-14
*/
<FileCatalog>{
@SuppressWarnings("unused")
privatestaticLoglog=LogFactory.getLog(FileCatalogAction.class);//日誌記錄
;
//刪除記錄的同時刪除相應文件
publicActionForwardfileDelete(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
String[]id=request.getParameterValues("resourceId");
if(id!=null&&id[0].contains(",")){
id=id[0].split(",");
}
String[]fileUrls=newString[id.length];
for(intj=0;j<id.length;j++){
fileUrls[j]=fileCatalogService.findObject(id[j]).getFileUrl();
if(!isEmpty(fileUrls[j])){
//如果該文件夾不存在則創建一個uptext文件夾
Filefileup=newFile(fileUrls[j]);
if(fileup.exists()||fileup!=null){
fileup.delete();
}
}
fileCatalogService.deleteObject(id[j]);
}
setAllActionInfos(request);
returnlist(mapping,form,request,response);
}
@Override
publicActionForwardsave(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
Stringid=request.getParameter("resourceId");
BooleanfileFlag=Boolean.valueOf(request.getParameter("fileFlag"));
if(fileFlag!=null&&fileFlag==true){
returnsuper.save(mapping,form,request,response);
}else{
StringfileUrl=this.fileUpload(form,request,id,fileFlag);
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
response.setHeader("Charset","GBK");
response.setHeader("Cache-Control","no-cache");
response.getWriter().write(fileUrl);
response.getWriter().flush();
}
returnnull;
}
@SuppressWarnings("unchecked")
publicStringfileUpload(ActionFormform,HttpServletRequestrequest,Stringid,BooleanfileFlag)throwsFileNotFoundException,IOException{
request.setCharacterEncoding("GBK");
StringbasePath=getServlet().getServletConfig().getServletContext().getRealPath("")+"/";
StringfilePath="uploads/";//獲取項目根路徑;
/*注釋部分對應jqueryuploaploadify插件的後台代碼,只是還存在編碼問題,默認為utf-8
StringsavePath=getServlet().getServletConfig().getServletContext().getRealPath("");//獲取項目根路徑
savePath=savePath+"\uploads\";
//讀取上傳來的文件信息
Hashtable<String,FormFile>fileHashtable=form.getMultipartRequestHandler().getFileElements();
Enumeration<String>enumeration=fileHashtable.keys();
enumeration.hasMoreElements();
Stringkey=(String)enumeration.nextElement();
FormFileformFile=(FormFile)fileHashtable.get(key);
Stringfilename=formFile.getFileName().trim();//文件名
filename=newEncodeChange().changeCode(filename);
Stringfiletype=filename.substring(filename.lastIndexOf(".")+1);//文件類型
savePath=savePath+filetype+"\";
System.out.println("path:"+savePath);
StringrealPath=savePath+filename;//真實文件路徑
//如果該文件夾不存在則創建一個文件夾
Filefileup=newFile(savePath);
if(!fileup.exists()||fileup==null){
fileup.mkdirs();
}
if(!filename.equals("")){
//在這里上傳文件
InputStreamis=formFile.getInputStream();
OutputStreamos=newFileOutputStream(realPath);
intbytesRead=0;
byte[]buffer=newbyte[8192];
while((bytesRead=is.read(buffer,0,8192))!=-1){
os.write(buffer,0,bytesRead);
}
os.close();
is.close();
//如果是修改操作,則刪除原來的文件
Stringid=request.getParameter("resourceId");
if(!isEmpty(id)){
FileCatalogfileCatalog=fileCatalogService.findObject(id);
StringfileUrl=fileCatalog.getFileUrl();
if(!isEmpty(fileUrl)){
Filefiledel=newFile(fileUrl);
if(filedel.exists()||filedel!=null){
filedel.delete();
}
}
request.setAttribute("entity",fileCatalog);
}
response.getWriter().print(realPath);//向頁面端返回結果信息
}*/
//讀取上傳來的文件信息
Hashtable<String,FormFile>fileHashtable=form.getMultipartRequestHandler().getFileElements();
Enumeration<String>enumeration=fileHashtable.keys();
enumeration.hasMoreElements();
Stringkey=(String)enumeration.nextElement();
FormFileformFile=(FormFile)fileHashtable.get(key);
Stringfilename=formFile.getFileName().trim();//文件名
Stringfiletype=filename.substring(filename.lastIndexOf(".")+1);//文件類型
IntegerfileSize=formFile.getFileSize();
filePath+=Calendar.getInstance().get(Calendar.YEAR)+"/"+filetype+"/";
StringrealPath=basePath+filePath+filename;//真實文件路徑
if(!filename.equals("")){
//如果是修改操作,則刪除原來的文件
if(!isEmpty(id)){
FileCatalogfileCatalog=fileCatalogService.findObject(id);
StringfileUrl=fileCatalog.getFileUrl();
if(!isEmpty(fileUrl)){
fileUrl=basePath+fileUrl;
Filefiledel=newFile(fileUrl);
if(filedel.exists()||filedel!=null){
filedel.delete();
}
}
request.setAttribute("entity",fileCatalog);
}
//如果該文件夾不存在則創建一個文件夾
Filefileup=newFile(basePath+filePath);
if(!fileup.exists()||fileup==null){
fileup.mkdirs();
}
//在這里上傳文件
InputStreamis=formFile.getInputStream();
OutputStreamos=newFileOutputStream(realPath);
intbytesRead=0;
byte[]buffer=newbyte[8192];
while((bytesRead=is.read(buffer,0,8192))!=-1){
os.write(buffer,0,bytesRead);
}
os.close();
is.close();
}
filePath+=filename;
Stringresult="{"fileName":""+filename+"","fileType":""+filetype+"","fileSize":"+fileSize+","fileUrl":""+filePath+""}";
returnresult;
}
(){
returnfileCatalogService;
}
(){
this.fileCatalogService=fileCatalogService;
}
}
F. InfoHash是什麼
InfoHash表示哈希方法名,這里還可以使用ED2K,AICH,SHA1和MD5等。這個值是文件的標識符,是不可缺少的。
一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入通過散列演算法變換成固定長度的輸出,該輸出就是散列值。
這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
(6)文件上傳散列擴展閱讀
磁力鏈接最常見的用途是基於文件內容的散列函數值來鏈接到特定文件,生成一個唯一的文件識別符,類似於ISBN。
不像常規的識別符,內容散列可以被任意一位持有此文件的人生成,所以並不需要一個中心機構,這使其在文件共享領域經常被用作搜索條件,因任何人都可以分發一個磁力鏈接來確保該鏈接指向的資源就是他想要的,而和得到該資源的方式無關。
G. utorrent 下載好的文件拷貝到另一台電腦上傳
文件轉移到台式機上以後在台式機上打開該文件所對應的種子文件,把文件保存地址改到它在台式機上的新位置,勾選跳過散列檢查,tracker用於用戶(在論壇下載時候的用戶)的身份識別,在你下載種子文件時候會寫進種子文件中,這樣你關於這個種子的上傳和下載流量就會和你下載所用的賬戶掛鉤
H. 上傳下載文件時常見的hash值,sha1值,還有md5是不是一回事
HASH是根據文件的內容的數據通過邏輯運算得到的數值, 不同的文件(即使是相同的文件名)得到的HASH值是不同的, 所以HASH值就成了每一個文件在EMULE里的身份證. 不同HASH值的文件在EMULE里被認為是不同的文件,相同的HASH值的文件的內容肯定是完全相同(即使文件名不同). HASH值還有文件校驗的功能,相當於文件的校驗碼. 所以還可以用來檢查文件下載是否正確(所以EMULE下載完畢時,都會在HASH文件一遍, 檢查文件是否出錯)
打個比喻,文件的SHA1值就像人的指紋,是文件的數字指紋,是唯一的,一個文件對應一個唯一的SHA1值,一般用來確認你的文件和官方發布的是否一致.如果官方原版文件被別人做過手腳,那麼算出來的SHA1值就會不同.所以SHA1值是用來「驗明正身」的。有些居心叵測的人在官方系統光碟裡面加入木馬程序、廣告程序等,然後再放出來給人下載,如果你不檢查SHA1值就貿然安裝就中招了,可以在網上下載一個數字指紋檢驗器來計算你下載回來的win7系統文件的SHA1值,然後到微軟的MSDN去查看官方發布的SHA1值,如果兩者相等,說明你下載的文件是和官方提供的是一樣的,你可以放心的安裝了。這就是SHA1值的用處,其他地方不用SHA1值的。
操作系統的ISO文件一般可以直接刻盤安裝,不用解壓出來。為了保險起見你最好用「UltraISO」軟體打開你的ISO文件,如果顯示為「可啟動XX文件」那麼你就放心直接刻錄吧。
MD5的
md5
典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:
MD5 (tanajiya.tar.gz) =
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的「數字指紋」,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」都會發生變化。
我們常常在某些軟體下載站點的某軟體信息中看到其MD5值,它的作用就在於我們可以在下載該軟體後,對下載回來的文件用專門的軟體(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。
I. 用哈希(散列)方法處理沖突(碰撞)可能出現堆積(聚集)現象,為什麼「存儲效率」會受堆積現象直接影響
因為可能數據會重復
簡單的例子,網路網盤檢查你上傳的文件是否違規,就會將你的文件哈希值與違規文件的進行比對,假如你的文件或數據與違規庫中的文件的哈希值沖突(碰撞),那麼激動文件就會被誤封。
J. 文件在上傳過程前,安全組件計算散列值失敗是什麼意思
摘要 您好,這是由於服務端計算的散列值和客戶端(即您的電腦)計算的散列值不同(正常情況下應該是相同的),或者客戶端散列值計算程序計算失敗導致的。在這種情況下,會被判斷為環境不安全,所以無法進行後續上傳操作。