利用位運算實作字串的加密解密。
7B->8B(完整程式)
加密方法:(完整程式)
將待加密字串轉換成位元組陣列(b),并補齊不足的位元組,以使該位元組陣列(t1)元素個數為 7 的整數倍。
將上述位元組陣列依序分成每 7 個位元組為一組,即每組 56 位位元。將這 56 位位元每 7 個位元放入一個位元組的低 7 位,即每組 7 個位元組轉換為 8 個位元組(t2)。轉換規則
將新的位元組陣列后追加原位元組陣列長度資訊(可能補過位元組),并轉換為字串(t3)。
處理新字串中可能出現的 '\0' 字符(采用轉義符法)。
將處理后的最終字串作為加密字串。
解密方法
提示:先決議轉義、再應用轉換規則
uj5u.com熱心網友回復:
位運算, 沒有難度,就是麻煩一點點56bits轉64bits
long long int 是8位int,剛好64位可以干這個事兒
設計一個聯合型別,容納初始資料
union BT {
unsigned long long int v;
unsigned char b8[8];
} b7t;
memset(b7t.b8, 0, 8);
把7個byte賦值給b7t.b8的0到6上,最后一個空, 如果不足7個byte就只賦值前面幾個就可以了
再設計一個結構型別,用來容納轉換后的資料
struct B8T {
unsigned char b8[8];
int len;
} b8t;
encode:
for ( int j=0; j<8; j++)
b8t.b8[j] = b7t.v&0x7f, b7t.v>>7;
decode:
b7t.v=0L;
for (int j=0; j<8; j++)
b7t.v |= b8t.b8[j], b7t.v<<7;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110098.html
標籤:新手樂園
上一篇:c++多載自減運算子
