gpt4 book ai didi

c++ - 使用 STL、cs106l 的单字母替换加密

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:15 25 4
gpt4 key购买 nike

我在 CS106L 中做关于 STL 算法的练习,其中一个问题是使用 random_shuffle 进行替换加密。

问题是使用 random_shuffle 实现一个函数 MonoalphabeticSubstitutionEncrypt,它接受源字符串并使用随机的 Monoalphabetic 替换密码对其进行加密。

这意味着一开始我有"AB..XYZ"并且刚刚将 random_shuffle 调用到 A-Z并生成类似“KVDQ ... MSB”的内容然后做加密原始字符串的映射。

我可以使用映射来完成,但应该只使用那些 STL 算法来完成。

有人有想法吗?谢谢!

我是这样做的,但似乎我没有使用 STL 算法的强大功能

string MonoSubsitutionEncrypt(string line){
string original = "abcdefghijklmnopqrstuvwxyz";
string excrypt = original;
random_shuffle(encrypt.begin(), encrypt.end());
map<char, char> m;
for (int i = 0;i < original.length(); i++)
m.insert(make_pair(original[i],encrypt[i]));
string result;
for (int i = 0; i < line.length(); i++)
result += m[line[i]];
return result;
}

最佳答案

我刚刚写了一个将字节随机混洗成其他字节的版本。你将不得不经历一些困难才能让它只接受和输出 ascii 字符。我特别处理空字符,因为它应该被保留以指示字符串的结尾。

我的算法伪代码如下:

#include <algorithm>
#include <iostream>
#include <vector>
#include <string>

template class Filler (T)
constructor Filler(T item)
initial = item

T operator () ()
return initial++

private T initial

template class Encryptor (T1, T2)
constructor Encryptor(T1 mapping)
cipher = mapping

T2 operator () (T2 value)
return cipher[value]

private T1 cipher

int main (int c, char * v[])
// stl class, big enough to hold each char
vector<unsigned char> alphabet(256)

// creates a filler object described above
Filler<unsigned char> filler(0)

// stl function, fills alphabet with one of each char
generate_n(alphabet.begin(), 256, filler)

// stl function, shuffles alphabet (start at 1, leave NULL character at beginning)
random_shuffle(alphabet.begin() + 1, alphabet.end())

// creates a generator to be passed to transform
Encryptor<vector<unsigned char>, unsigned char> e(alphabet)

// get input value: either first parameter, or nothing if no parameters
string input = c > 1 ? v[1] : ""

// stl function, uses encryptor containing alphabet mapping to obfuscate input
transform(input.begin(), input.end(), input.begin(), e)

// printing the string yields garbled crap
cout << input << endl;

使用的 STL 类的文档: string vector ostream

所用 STL 方法的文档:generate_n random_shuffle transform

如果这篇文章泄露太多,有人会编辑它。

关于c++ - 使用 STL、cs106l 的单字母替换加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com