[英]Generate numbers /c /wpa2
我想生成20个字符的wpa2密钥,该密钥仅在C ++中由1到10,000,000,000,000,000,000之间的数字组成。 每个键的输出格式必须为20个字符的格式,例如:
00000000000000000001
00000000000000000002
00000000000000000003
00000000000000000011
12300000000099945611
等等。
我有此代码,但是:
它不会使生成的数字以20个字符的格式降序排列。
for (int i=0;i<=10000000000000000000;i++){ cout << 10000000000000000000 -i<<"\\n"; }
这些数字大于(长)整数,因此由于大小为“ 10000000000000000000 -i”,因此Linux shell中的g ++编译器也不想执行。
在这种特殊情况下,为什么不只拥有一个字符串,并且在最低索引处增加字符(如果它溢出(>'9'),然后向上增加下一个字符)。 重复并冲洗直至完成。
因此,如下所示:
std::string s = '000';
std::string::size_type len = s.length()
while (s != "999")
{
cout << s << endl;
s[len-1] ++;
int i = len-1;
while(s[i] > '9' && i >= 0)
{
s[i] = '0';
i--;
s[i]++;
}
}
但是,如果您的计算机每秒执行一次以上代码1,000,000,000次的循环,则整个序列将花费317年的时间。 因此,我希望您有足够的时间并且饮食健康。
如果要将其存储为数字,则编译器需要支持64位整数。 可能支持long long数据类型。 将i更改为unsigned long long,并将数字文字更改为10000000000000000000ULL。 注意不要将这些值转换为int(偶然或其他),否则将会丢失一些数据。
从字面上看,要遍历所有这些数字将花费数年。
如果您只想生成一个随机的20个字符的WPA2密钥,则应该执行以下操作,而不要使用内置函数:
#include <iostream>
#include <string>
#include <chrono>
#include <random>
#include <algorithm>
std::string get_key() {
// Define all allowed characters (a WPA2 key can also contain letters).
std::string chars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Shuffle the characters.
std::mt19937 g(std::chrono::system_clock::now().time_since_epoch().count());
std::shuffle(std::begin(chars), std::end(chars), g);
// Return the first 20 characters.
return chars.substr(0, 20);
}
int main() {
std::cout << get_key() << std::endl;
}
如果只想由数字组成的键,则从chars
删除所有字母chars
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.