ASCII字符随机混淆字典的生成

本文介绍了一种用于创建ASCII字符混淆字典及其逆字典的程序。通过随机排列算法,可以高效地生成用于字符替换的映射,例如将'0'映射到'1'等。代码示例展示了如何生成'0'-'9'的ASCII码混淆字典,并说明了如何修改范围以混淆字母。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    有些时候出于不可告人的目的,我们可能希望把某些字符1对1地映射到另一个字符。比如'0'用'1'代替,'1'用'2'代替……。这个一般用混淆字典和其对偶字典就可以很高效(都是O(1))的搞定。不过我下午发现构造混淆字典很容易,构造其对偶字典则很痛苦,脑筋纠结,于是一咬牙一跺脚写了个程序来干这件事情。写完后发现不知道该把代码放哪,于是干脆贴在blog上备忘。

========================代码的分割线============================
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

//    gene dicts to map [min-max] to [min-max] and against
void geneDict(int min, int max)
  
    int cnt = max - min + 1;
    if (cnt <= 0)
    {
        return;
    }
    //    initial
    int* dict = new int[cnt];
    int* agDict = new int[cnt];
    for (int i = 0; i < cnt; i++)
    {
        dict[i] = min + i;
    }
    //    random arrange algo
    srand((unsigned)time(NULL));
    for (int i = 0; i < cnt; i++)
         
        int swap_pos = rand() % cnt;
        if (i != swap_pos)
        {
            int tmp = dict[i];
            dict[i] = dict[swap_pos];
            dict[swap_pos] = tmp;
        }
    }
    //    get against dict
    for (int i = 0; i < cnt; i++)
     
        agDict[dict[i] - min] = i + min;
    }
    //    print
    cout << "char FUZZY_DICT[] = {";
    for (int i = 0; i < cnt; i++)
    {
        if (i != 0)
        {
            cout << ", ";
        }
        cout << "'" << ((char)dict[i]) << "'";
    }
    cout << "};" << endl;
    cout << "char DEFUZZY_DICT[] = {";
    for (int i = 0; i < cnt; i++)
    {
        if (i != 0)
        {
            cout << ", ";
        }
        cout << "'" << ((char)agDict[i]) << "'";
    }
    cout << "};" << endl;

    delete[] dict;
    delete[] agDict;
}

int main(int argc, char* argv[])
{
    int MIN_NUM = '0';
    int MAX_NUM = '9';   
    geneDict(MIN_NUM, MAX_NUM);
   
    return 0;
}
=====================================

   以上代码用来生成'0'-'9'之间的ASCII码混淆字典。将MIN_NUM和MAX_NUM设为'a'和'z'则可混淆小写英文字母。设为'A'和'Z'则可混淆大写英文字母。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值