QP加密編碼解碼

2021-05-25 12:44:15 字數 2355 閱讀 4920

qp(quoted-printable)也是mime郵件中常用的編碼方式之一。同base64 一樣,它也將輸入的字串或資料編碼成全是ascii碼的可列印字串。quoted-printable編碼的基本方法是:輸入資料在 33-60、62-126範圍內的,直接輸出;其它的需編碼為"="加兩個位元組的hex碼(大寫)。為保證輸出行不超過規定長度,可在行尾加"=/r/n"序列作為軟回車。

qp編碼規則如下:

規則1:除了換行符,其它任何8位長度的位元組必須被表示成乙個"="號加上高四位的十六進製制數

和低四位的十六進製制數,十六進製制數是用"0123456789abcdef"的ascii字元碼表示,其中"abcdef"都必須是大寫;

規則2:當8位長度的位元組值在33至60(包括33和60),62至126(包括62和126)之間時,直接用該資料對應的ascii碼來表示;

規則3:當8位長度的位元組值是9和32時,用該資料對應的ascii碼(9:tab(ht),32:space)來表示,

但若是出現在行尾則必須按規則1進行轉換;

規則4:對於crlf換行符必須用"=0d=0a"來代替;

規則5:qp編碼每行不得超過76個字元(不包含最後的"/r/n"兩個字元),否則必須換行,

換行方法是:在結尾處加上"=/r/n"

其它:符號"-"不用進行qp編碼,所以不要用"-"符號來表示實體之間的分界,

最好用"=_"來代替,對於"!"#$[/]^'~"這些字元必須按規則1進行轉換.

參考**如下(c++**)

#include

#include

#include

using namespace std;

// 字元轉換為hex

string char2hex(unsigned char cval)

;unsigned char ctempbuf2[10] = ;

sprintf_s((char*)ctempbuf1, 10 * sizeof(unsigned char), "%02x", cval);

ctempbuf2[0] = toupper(ctempbuf1[0]);

ctempbuf2[1] = toupper(ctempbuf1[1]);

ctempbuf2[2] = '/0';

strtemp = (char*)ctempbuf2;

return strtemp;

}// qp編碼

bool qpencoding(string& astr, bool &ischanged)

unsigned char *c_copy = new unsigned char[length +1];

strcpy_s((char*)c_copy, (length +1) * sizeof(unsigned char), astr.c_str());

astr.clear();

int nlinelen = 0;

for (int i = 0; i < length; i++)

// 其它的需編碼為'='加兩個位元組的hex碼(大寫)

else

// 保證輸出行不超過規定長度, 可在行尾加"=/r/n"序列作為軟回車

if (nlinelen >= 73)

}// 釋放記憶體

delete c_copy;

c_copy = null;

return true;

}// qp解碼

bool qpdecoding(string& astr, bool &ischanged)

unsigned char* pctemp1 = 0;

unsigned char* pdst = new unsigned char[nsrclen +1];

memset(pdst, 0, nsrclen +1);

pctemp1 = pdst;

char* pctemp2 = 0;

char* psrc = new char[nsrclen +1];

strcpy_s((char*)psrc, (nsrclen + 1) * sizeof(char), astr.c_str());

astr.clear();

pctemp2 = psrc;

int i = 0;

while (i < nsrclen)

else

// 非編碼位元組

else}}

// 輸出加個結束符

pdst = '/0';

astr = (char*)pctemp1;

delete pctemp1;

pctemp1 = 0;

delete pctemp2;

pctemp2 = 0;

return true;

}

js 加密解密(javascript編碼解碼)

在為了防止亂碼的情況下,有時我們會採用使用js 加密或解密中文字串 下面總結下js 常用到加密解密常用的東東 encodeuri 和encodeuricomponent 方法是將編碼傳遞給瀏覽器的uri 統一資源標識 有效的uri不包括某些字元,如空格,等.這兩個函式將那些特殊字元替換僅為utf 8...

編碼 解碼 中文編譯碼

字串和字符集的關係 字串是python程式的一種格式 位元組串是網路傳輸的一種形式 字串和位元組串轉換 字串 str encode 位元組串 bytes 位元組串 bytes decode 字串 str ascii字符集是utf 8字符集的前128位字元,可以說ascii字符集是utf 8字符集的子...

js編碼 解碼

js對文字進行編碼涉及3個函式 escape,encodeuri,encodeuricomponent,相應3個解碼函式 unescape,decodeuri,decodeuricomponent 1 傳遞引數時需要使用encodeuricomponent,這樣組合的url才不會被 等特殊字元截斷。...