#include
#include
#include
#include
#include
#include
//刪除陣列
#define safedeletearraysize(pdata) }
#pragma comment(lib, "wintrust.lib")
#pragma comment(lib, "crypt32.lib")
#define encoding (x509_asn_encoding | pkcs_7_asn_encoding)
//關閉檔案重定向系統
bool
disablewow64fsredirection(
void
)
} return
false;
} //開啟檔案重定向系統
bool
revertwow64fsredirection(
void
)
} return
false;
} //帶重定向開啟檔案
bool
redirectioncreatefile(
const
wchar_t
* pfilepath,
handle
& hfile)
//開啟檔案重定向系統
if(bdisablewow64fsredirection)
return
bret;
} //獲取檔案數字簽名
wchar_t
* getcertname(
wchar_t
* pfilepath)
doclosehandle(hfile);
cert_blob object = ;
object.cbdata = dwfilesize;
object.pbdata = pbuff;
bresult = cryptqueryobject(cert_query_object_blob, &object
, cert_query_content_flag_pkcs7_signed_embed, cert_query_format_flag_binary
, 0, &dwencoding, &dwcontenttype, &dwformattype, &hstore, &hmsg, null);
if(!bresult)
if(!bresult)
break
; }
bresult = cryptmsggetparam(hmsg, cmsg_signer_info_param, 0, null, &dwsignerinfo);
if(!bresult)
break
; psignerinfo = (pcmsg_signer_info) new
char
[dwsignerinfo];
if(null == psignerinfo)
break
; zeromemory(psignerinfo, dwsignerinfo);
bresult = cryptmsggetparam(hmsg, cmsg_signer_info_param, 0, (pvoid
)psignerinfo, &dwsignerinfo);
if(!bresult)
break
; certinfo.issuer = psignerinfo->issuer;
certinfo.serialnumber = psignerinfo->serialnumber;
pcertcontext = certfindcertificateinstore(hstore, encoding, 0, cert_find_subject_cert, (pvoid
)&certinfo, null);
if(null == pcertcontext)
break
; dwdata = certgetnamestring(pcertcontext, cert_name_******_display_type, 0, null, null, 0);
if(1 >= dwdata)
break
; pcertname = new
wchar_t
[dwdata + 1];
if(null == pcertname)
break
; zeromemory(pcertname, (dwdata + 1) * sizeof
(wchar_t
));
if(!(certgetnamestring(pcertcontext, cert_name_******_display_type, 0, null, pcertname, dwdata)))
break
; } while
(false);
safedeletearraysize(pbuff);
safedeletearraysize(psignerinfo);
if(pcertcontext != null) certfreecertificatecontext(pcertcontext);
if(hstore != null) certclosestore(hstore, 0);
if(hmsg != null) cryptmsgclose(hmsg);
return
pcertname;
} //檢測檔案是否有簽名
wchar_t
* getfilecat(
wchar_t
* lpfilename)
; wintrust_file_info wfi = ;
wintrust_catalog_info wci = ;
catalog_info ci = ;
hcatadmin hcatadmin = null;
handle
hfile = invalid_handle_value;
dword
dwcnt = 0;
pbyte
pbyhash = null;
wchar_t
* pszmembertag = null;
hcatinfo hcatinfo = null;
hresult
hr;
static
guid action = wintrust_action_generic_verify_v2;
const
guid gsubsystem = driver_action_verify;
wchar_t
* pcatalogfile = null;
do
} else
closehandle(hfile);
hcatinfo = cryptcatadminenumcatalogfromhash(hcatadmin, pbyhash, dwcnt, 0, null);
if(null == hcatinfo)
else
wci.cbstruct = sizeof
(wintrust_catalog_info);
wci.pcwszcatalogfilepath = ci.wszcatalogfile;
wci.pcwszmemberfilepath = lpfilename;
wci.pcwszmembertag = pszmembertag;
wd.cbstruct = sizeof
(wintrust_data);
wd.pcatalog = &wci;
wd.dwuichoice = wtd_ui_none;
wd.dwunionchoice = wtd_choice_catalog;
wd.fdwrevocationchecks = wtd_stateaction_verify;
wd.dwstateaction = wtd_stateaction_verify;
wd.dwprovflags = 0;
wd.hwvtstatedata = null;
wd.pwszurlreference = null;
} }
hr = winverifytrust((hwnd
)invalid_handle_value, &action, &wd);
if(succeeded(hr) || wcslen(ci.wszcatalogfile) > 0)
if(null != hcatinfo)
} while
(false);
if(hcatadmin)
safedeletearraysize(pbyhash);
safedeletearraysize(pszmembertag);
return
pcatalogfile;
} //獲取檔案數字簽名
wchar_t
* getfilecertname(
wchar_t
* pfilepath)
} safedeletearraysize(pcatfilepath);
return
pcertname;
} int
main(
void
)
Android Studio獲取數字簽名
之前用eclipse時,應用的簽名直接就可以視覺化檢視 但是android stduio這點就比較特殊,不能直接視覺化查詢。不過也存在多種查詢方式,這次我介紹一種最常見的 命令列查詢 第一步 開啟cmd 第二步 cd android 進入到.android 目錄 第三步 出現 輸入秘鑰庫口令 網上很...
數字簽名簽名概述
數字簽名的技術流程描述 1 傳送者使用摘要演算法對傳送資訊產生資訊摘要 2 傳送者使用自己的私鑰對資訊摘要進行簽名 3 傳送者將資訊本身和已簽名的摘要一起傳送出去 4 接收者使用相同的摘要演算法對資訊本身計算資訊摘要 5 接收者使用傳送者的公鑰對簽名的摘要就行驗籤,獲得資訊傳送者的資訊摘要 6 接收...
數字信封 數字簽名
2019 08 06 19 51 51 數字簽名是用來表明資料傳送者身份的,有了簽名就說明這個資料是傳送都發出來的。為什麼?因為可以用你的公鑰開啟你的簽名資訊,獲取明文的hash值。數字信封,被公鑰加密後的對稱密碼被稱為數字信封,用於對稱金鑰的交換。數字證書,用來證明資料傳送者的身份的。為什麼能證明...