从char加密到int

时间:2015-05-22 14:24:15

标签: c++ encryption

我正在用c ++编写一些加密程序,当我启动它时,控制台只打印一个字符,解密不起作用,当我进行加密/解密时,程序不会用数字编号nn,他和他的地址一起做。对不起我的英文。

// Var
std::string text = "string";
const char *nn = text.c_str();

// Encryption
int x = (int(nn));
x = x * 3 - 100 * 2;
cout << "Numerical numbers: " << x << endl;
cout << "String: " << (char(x)) << endl;

// Decryption
x = (x - 100 * 2) / 3;
cout << "Numerical numbers: " << x << endl;
cout << "String: " << (char(x));

2 个答案:

答案 0 :(得分:1)

我想你想加密这个字符的所有字符:

std::string text = "string";

在这种情况下,您需要一个整数向量而不是单个int来存储每个编码字符:

std::vector<int> encrypted;

由于您知道向量的最终大小,您可以预先准备向量以分配必要的空间,但这是可选的:

encrypted.reserve(text.size());

比你必须逐个浏览字符,对它们进行编码并将它们放到矢量中:

for(auto &ch : text) {
    int x = ch * 3 - 100 * 2;
    encrypted.push_back(x);
}

生成的矢量可以这样打印:

cout << "Numerical numbers: ";
for(auto x : encrypted) { cout << x << ", "; }
cout << endl;

解密类似:

std::string decrypted;
decrypted.reserve(encrypted.size());
for(auto &x : encrypted) {
    char ch = (x + 100 * 2) / 3;
    decrypted += ch;
}

答案 1 :(得分:0)

除非您必须使用公式x * 3 - 100 * 2进行加密/解密,否则我建议您使用XOR

#include <iostream>
#include <string>

int main()
{
    // Var
    std::string text = "string", encrypt, decrypt;

    // Encryption
    for (int i = 0; i < text.length(); i++)
    {
        encrypt += text[i] ^ '1';
    }

    // Decryption
    for (int i = 0; i < encrypt.length(); i++)
    {
        decrypt += encrypt[i] ^ '1';
    }

    std::cout << "original text: " << text << std::endl << "encrypted text: " << encrypt << std::endl << "decrypted text: " << decrypt;
} 

上述代码的输出为:

  

原文:字符串

     

加密文字:BECX_V

     

解密文字:字符串

Here是上述代码的一个工作示例。