Преобразовать закодированный зЬй :: строку из Base16 в Base10?
Следующие должны работать на вас. В приведенном ниже коде показано, как это сделать с помощью строк стиля C, которые легко концептуализировать. Ваш предыдущий вопрос в Convert CryptoPP::Integer to LPCTSTR имеет ссылки.
#include <iostream>
#include <string>
using namespace std;
#include "cryptlib.h"
#include "integer.h"
using namespace CryptoPP;
int main(int argc, char* argv[])
{
string s2, s1 =
"bbb91c1c95b656f386b19ab284b9c0f66598e7761cd71569734bb72b6a7153b77613a6cef8e63"
"e9bd9bb1e0e53a0fd8fa2162b160fcb7b461689afddf098bfc32300cf6808960127f1d9f0e287"
"f948257f7e0574b56585dd1efe1192d784b9c93f9c2215bd4867062ea30f034265374fa013ab4"
"5af06cd8554fd55f1c442c2ed";
// Append 'h' to indicate Base16
// Integer n((s1 + "h").c_str());
// Prepend '0x' to indicate Base16
Integer n(("0x" + s1).c_str());
// Convert to Base10
s2 = IntToString<Integer>(n, 10);
cout << s2 << endl;
return 0;
}
Код выше показывает вам, как сделать это со строками C-стиле, который легко осмыслять. Другой способ сделать это использует Crypto ++ Pipeline
для преобразования строки ASCII в массив байтов байтов.
#include <iostream>
#include <string>
using namespace std;
#include "cryptlib.h"
#include "integer.h"
#include "filters.h"
#include "hex.h"
using namespace CryptoPP;
int main(int argc, char* argv[])
{
string s3, s2, s1 =
"bbb91c1c95b656f386b19ab284b9c0f66598e7761cd71569734bb72b6a7153b77613a6cef8e63"
"e9bd9bb1e0e53a0fd8fa2162b160fcb7b461689afddf098bfc32300cf6808960127f1d9f0e287"
"f948257f7e0574b56585dd1efe1192d784b9c93f9c2215bd4867062ea30f034265374fa013ab4"
"5af06cd8554fd55f1c442c2ed";
// Use a HexDecoder to convert to big-endian array
StringSource ss(s1, true, new HexDecoder(new StringSink(s2)));
// Use big-endian array to construct n
Integer n((const byte*)s2.data(), s2.size());
// Convert to Base10
s3 = IntToString<Integer>(n, 10);
cout << s3 << endl;
return 0;
}
Вот еще один способ выполнить преобразование с использованием Crypto ++ Pipeline
.
#include <iostream>
#include <string>
using namespace std;
#include "cryptlib.h"
#include "integer.h"
#include "filters.h"
#include "hex.h"
using namespace CryptoPP;
int main(int argc, char* argv[])
{
string s2, s1 =
"bbb91c1c95b656f386b19ab284b9c0f66598e7761cd71569734bb72b6a7153b77613a6cef8e63"
"e9bd9bb1e0e53a0fd8fa2162b160fcb7b461689afddf098bfc32300cf6808960127f1d9f0e287"
"f948257f7e0574b56585dd1efe1192d784b9c93f9c2215bd4867062ea30f034265374fa013ab4"
"5af06cd8554fd55f1c442c2ed";
// Use a source to convert to big-endian array
StringSource ss(s1, true, new HexDecoder);
// Use big-endian array to construct n
Integer n;
n.Decode(ss, ss.MaxRetrievable());
// Convert to Base10
s2 = IntToString<Integer>(n, 10);
cout << s2 << endl;
return 0;
}
Если вы заинтересованы в алгоритме, который преобразует ASCII строку в массив байтов для внутреннего представления, то см StringToInteger
in integer.cpp
. Он многократно делит на базу (2, 8, 10, 16 и т. Д.).
Несомненно, добавляю это прямо сейчас! – 123problem
Они являются строками, получены n из поколения ключей rsa, конвертируют n из CryptoPP :: Integer в строку (благодаря вашей помощи благодаря), шифруют n в base64 (всегда строка: здесь код -> std :: string hexencoded; CryptoPP: : StringSource ss (CryptoppIntegerToString (n), true, новый CryptoPP :: Base64Encoder (newCryptoPP :: StringSink (hexencoded), false)); После того, как у меня есть закодированная строка Base64, я шифрую его с помощью RC6 и оболочки, затем сохраните его в реестр, хочу дешифровать его, я взял строку, расшифровал ее, но я получил шестнадцатеричный код, и это моя проблема, я хочу преобразовать его в десятичную десятину – 123problem
Нет проблем. Я сейчас отредактирую свой вопрос! – 123problem