Mysql中Hex 和Unhex 函式詳解

2021-10-19 17:58:51 字數 1298 閱讀 1651

一、hex()和unhex()函式

hex():將乙個字串或數字轉換為十六進製制格式的字串。

unhex():把十六進製制格式的字串轉化為原來的格式。每對十六進製制數字轉化為乙個字元。執行hex(str)的逆運算。即,它將引數中的每對十六進製制數字解釋為乙個數字,並將其轉換為該數字表示的字元。結果字元將作為二進位制字串返回。引數字串中的字元必須為合法的十六進製制數字:「 0」 ..「 9」,「 a」 ..「 f」,「 a」 ..「 f」。如果unhex在引數中遇到任何非十六進製制數字,則返回null。

select hex('bald programmer');
結果:62616c642070726f6772616d6d6572

select unhex('62616c642070726f6772616d6d6572');
結果:bald programmer

(1)匯出時採用hex()函式讀取資料,把二進位制的資料轉為16進製制的字串;

select hex(binfield) from tablename ;
(2)匯入時採用unhex()函式,把16進製制的字串轉為二進位制的資料導入庫中;

insert into tablename binfield values(unhex(baldprogrammer));
sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。

$sql = sprintf("select* from `test` where `name` = unhex('%s')", bin2hex($name));
即先使用php自帶的函式bin2hex函式將輸入待查詢字串處理成16進製制字串,然後再sql執行過程中使用資料庫本身的unhex函式將該16進製制字串反轉為原先的正常字串。

這樣即便$name的值為maratrix' or 1 = 1也會正常被當作查詢字串處理,而不存在sql注入的問題了。

bin2hex之後$name就全部轉換成hex格式的資料了,在拼接到sql裡面之後就不會產生存在漏洞的語句了。

HEX 和 BIN 的轉換

intel hex介紹 intel hex由任意數量的十六進製制記錄組成。每個記錄包含5個域,它們按以下格式排列 llaaaatt dd.cc 每一組字母對應乙個不同的域,每乙個字母對應乙個十六進製制編碼的數字。每乙個域由至少兩個十六進製制編碼數字組成,它們構成乙個位元組,就像以下描述的那樣 每個i...

Qt中串列埠傳送HEX資料

在lineedit輸入資料的型別是qstring型別,以往我在傳送的時候是ascii方式傳送,這會兒突然遇到乙個是十六進製制傳送 接受的下位機,就需要將qstring 轉化為十六進製制,本來直接用tohex進行轉化,但考慮到在輸入的的時候有間隔符之類的,我就寫了個轉化的函式 以下是轉化單個字元的函式...

HEX和BIN檔案的區別

hex 檔案和 bin 檔案的區別,這兩個檔案裡都包含 cpu可以執行的機器碼,只是 hex 比bin 多一些資訊,就是機器碼的儲存 位址。這些儲存位址實際是給燒寫程式的軟體使用的。如果我們燒寫 hex 檔案到板卡裡 flash 儲存器 燒寫軟體就不會問我們儲存位址,因為這個檔案裡已經包含了這類資訊...