中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DES加密應用

發布時間:2020-06-22 13:41:33 來源:網絡 閱讀:636 作者:fengyuzaitu 欄目:編程語言

1)數據格式
明文按64位分組,密鑰要求是64位長度
2)明文填充方式
DES加密算法中要求明文長度必須是8個字節對齊。如果對于任意一段數據,加密前需要對最后一塊
填充到8個字節,解密后需要刪除填充的數據

填充有三種模式有
ZeroPadding,數據長度不對齊,填充0,對于明文以/0結束,可以區分出來
PKCS7Padding,假設數據長度需要填充n(n>0)個字節對齊,那么填充n個字節,每個字節都是n;如果數據本身已經對齊,則
填充一塊長度為塊大小的數據,每個字節都是塊大小。
PKCS5Padding, PKCS7Padding的子集,塊大小固定為8個字節

提供一段PKCS5Padding填充代碼
?ch = 8 - nlen % 8;
?memset(src + nlen, ch, ch);//padding5填充
說明nlen是明文長度,src + nlen是明文最后的指針, nlen%8有多少個字節沒有對齊,然后8 - nlen%8補充這么多的字節數

3)向量
在CBC(不光是DES算法)模式下,iv通過隨機數(或偽隨機)機制產生是一種比較常見的方法。iv的作用主要是用于產生密文的第一個block,以使最終生成的密文產生差異(明文相同的情況下),使密碼***變得更為困難,除此之外iv并無其它用途。最大的好處是,即使相同的明文,相同的密鑰,也能產生不同的密文。


4)一般情況下,通過DES加密之后,發送出去都需要進行十六進制編碼,有的還需要進行Base64編碼,這一點要切記!

調用OpenSSL加密的算法
在這里明文的長度限制為4096,主要是里面保存對齊后明文的數據長度是硬編碼導致的
bool EncryptDataByDESOfIV(std::string& key, std::string& iv, char* input_data, unsigned char* encrypt_data, int *data_len)
{
?if (key.size() != 8)?return false;

?DES_key_schedule ks;
?DES_cblock ivec = { 0 };
?int i = 0;
?int len = 0;
?int nlen = 0;

?char *data = (char *)input_data;? /* 原始明文, 十六進制字符串 */
?char *okey = (char *)key.c_str();????????????????? /* 原始密鑰, 十六進制字符串 */
?memcpy(&ivec, iv.c_str(), iv.size());
?unsigned char ch = '\0';
?unsigned char *ptr = NULL;

?unsigned char src[4096] = { 0 };
?unsigned char *dst = nullptr;
?DES_set_key_unchecked((const_DES_cblock*)okey, &ks);

?/* 分析補齊明文所需空間及補齊填充數據 */
?nlen = strlen((char *)data);
?//len = (nlen / 8 + (nlen % 8 ? 1 : 0)) * 8;
?len = nlen + 8 - (nlen % 8);
?dst = (unsigned char *)calloc(1, len);

?memcpy(src, data, len);

?ch = 8 - nlen % 8;
?memset(src + nlen, ch, 8 - nlen % 8);//padding7填充

?//printf("加密之前: ");
?//for (i = 0; i < len; i++) {
?//?printf("%.2X", *(src + i));
?//}
?//printf("\n");

?/* 加密塊鏈式加密 */
?DES_ncbc_encrypt(src, dst, len, &ks, &ivec, DES_ENCRYPT);
?memcpy(encrypt_data, dst, len);
?*data_len = len;
?//printf("加密之后: ");
?//for (i = 0; i < len; i++) {
?//?printf("%.2X", *(dst + i));
?//}
?//printf("\n");

?free(dst);

?return true;
}

提供一種在線解密工具,驗證加密是否正確: http://tool.chacuo.net/cryptdes

?

引用
https://www.cnblogs.com/chenggang816/p/10542673.html
https://www.cnblogs.com/azbane/p/10179660.html


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平安县| 宁明县| 闸北区| 克东县| 宁城县| 固镇县| 萨迦县| 岱山县| 蒙山县| 平顺县| 名山县| 张北县| 陆丰市| 旬阳县| 运城市| 枞阳县| 烟台市| 平舆县| 双桥区| 都匀市| 德格县| 出国| 三河市| 嘉兴市| 嘉鱼县| 南雄市| 南岸区| 沛县| 乌拉特后旗| 博罗县| 安义县| 麟游县| 钟山县| 休宁县| 东城区| 辛集市| 商城县| 定州市| 陆河县| 广灵县| 鹤峰县|