477 lines
10 KiB
C++
477 lines
10 KiB
C++
#include "ui_crypto.h"
|
||
|
||
UICrypto::UICrypto()
|
||
{
|
||
uint32_t v = Crypto::HashCrc32(CreateBufferView("lveyou"));
|
||
auto x = Crypto::HashMd5(CreateBufferView("lveyou"));
|
||
std::string str = to_string_hex(CreateBufferView(x));
|
||
|
||
_panel = g_ui->CreatePanel();
|
||
_panel->SetPosScale({ 0.0f, 0.0f });
|
||
_panel->SetPosPixel(POS_CONTENT);
|
||
_panel->SetAutoRun(false);
|
||
|
||
UI::Panel* panel_menu = g_ui->CreatePanel();
|
||
panel_menu->SetLocator(createLocatorX(128, 4));
|
||
g_ui->SetPanelParent(panel_menu, _panel);
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("快速异或(XOR)");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("中文编码(Han256)");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("Base64");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("Md5(不安全)");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("Crc32");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("Blake2b(替代Md5)");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("AES");
|
||
panel_menu->Add(btn);
|
||
}
|
||
{
|
||
UI::ButtonSprite* btn = g_ui->CreateButtonSpriteDefault(
|
||
UI::ButtonStyle::LONG);
|
||
btn->SetMode(UI::ButtonMode::RADIO);
|
||
btn->SetString("RSA");
|
||
panel_menu->Add(btn);
|
||
}
|
||
_panelMenu = panel_menu;
|
||
|
||
|
||
_init_xor();
|
||
_init_han();
|
||
_init_base64();
|
||
_init_md5();
|
||
_init_crc32();
|
||
}
|
||
|
||
void UICrypto::Update()
|
||
{
|
||
_panel->Update();
|
||
std::size_t i = _panelMenu->GetSelectIndex();
|
||
if (i == 0)
|
||
{
|
||
_run_xor();
|
||
}
|
||
else if (i == 1)
|
||
{
|
||
_run_han();
|
||
}
|
||
else if (i == 2)
|
||
{
|
||
_run_base64();
|
||
}
|
||
else if (i == 3)
|
||
{
|
||
_run_md5();
|
||
}
|
||
else if (i == 4)
|
||
{
|
||
_run_crc32();
|
||
}
|
||
else if (i == 5)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
void UICrypto::Render()
|
||
{
|
||
}
|
||
|
||
void UICrypto::_init_xor()
|
||
{
|
||
{
|
||
UI::Panel*& panel = _panelXorA;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_A);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
{
|
||
UI::Panel*& panel = _panelXorB;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_B);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void UICrypto::_run_xor()
|
||
{
|
||
_panelXorA->Update();
|
||
_panelXorB->Update();
|
||
|
||
auto fn_run = [&]()
|
||
{
|
||
UI::EditBox* edt_a = _panelXorA->ExGetEditBox(0);
|
||
UI::EditBox* edt_a_16 = _panelXorA->ExGetEditBox(1);
|
||
UI::EditBox* edt_b = _panelXorB->ExGetEditBox(0);
|
||
UI::EditBox* edt_b_16 = _panelXorB->ExGetEditBox(1);
|
||
assert(edt_a && edt_b && edt_a_16 && edt_b_16);
|
||
if (!(edt_a && edt_b && edt_a_16 && edt_b_16))
|
||
return;
|
||
|
||
if (edt_a->IsChange())
|
||
{
|
||
std::string str = edt_a->GetString();
|
||
BufferView buf = CreateBufferView(str);
|
||
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
|
||
Crypto::EncryptXor(buf);
|
||
|
||
edt_b->SetString(str);
|
||
edt_b_16->SetString(to_string_hex(buf));
|
||
}
|
||
};
|
||
fn_run();
|
||
}
|
||
|
||
void UICrypto::_init_han()
|
||
{
|
||
{
|
||
UI::Panel*& panel = _panelHanA;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_A);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
{
|
||
UI::Panel*& panel = _panelHanB;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_B);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void UICrypto::_run_han()
|
||
{
|
||
_panelHanA->Update();
|
||
_panelHanB->Update();
|
||
|
||
auto fn_run = [&]()
|
||
{
|
||
UI::EditBox* edt_a = _panelHanA->ExGetEditBox(0);
|
||
UI::EditBox* edt_a_16 = _panelHanA->ExGetEditBox(1);
|
||
UI::EditBox* edt_b = _panelHanB->ExGetEditBox(0);
|
||
assert(edt_a && edt_b && edt_a_16);
|
||
if (!(edt_a && edt_b && edt_a_16))
|
||
return;
|
||
|
||
if (edt_a->IsChange())
|
||
{
|
||
std::string str = edt_a->GetString();
|
||
BufferView buf = CreateBufferView(str);
|
||
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
|
||
std::wstring wstr = Crypto::EncodeHan256(buf);
|
||
edt_b->SetString(CodeCvt::WideCharToUtf8(wstr));
|
||
}
|
||
else if (edt_b->IsChange())
|
||
{
|
||
std::string str = edt_b->GetString();
|
||
std::wstring wstr = CodeCvt::Utf8ToWideChar(str);
|
||
Buffer buf;
|
||
if (Crypto::DecodeHan256(wstr, buf))
|
||
{
|
||
edt_a->SetString(to_string(buf));
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
}
|
||
}
|
||
};
|
||
fn_run();
|
||
}
|
||
|
||
void UICrypto::_init_base64()
|
||
{
|
||
{
|
||
UI::Panel*& panel = _panelBase64A;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_A);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
{
|
||
UI::Panel*& panel = _panelBase64B;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_B);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
}
|
||
|
||
void UICrypto::_run_base64()
|
||
{
|
||
_panelBase64A->Update();
|
||
_panelBase64B->Update();
|
||
|
||
auto fn_run = [&]()
|
||
{
|
||
UI::EditBox* edt_a = _panelBase64A->ExGetEditBox(0);
|
||
UI::EditBox* edt_a_16 = _panelBase64A->ExGetEditBox(1);
|
||
UI::EditBox* edt_b = _panelBase64B->ExGetEditBox(0);
|
||
assert(edt_a && edt_b && edt_a_16);
|
||
if (!(edt_a && edt_b && edt_a_16))
|
||
return;
|
||
|
||
if (edt_a->IsChange())
|
||
{
|
||
std::string str = edt_a->GetString();
|
||
BufferView buf = CreateBufferView(str);
|
||
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
|
||
std::string str_out = Crypto::EncodeBase64(buf);
|
||
edt_b->SetString(str_out);
|
||
}
|
||
else if (edt_b->IsChange())
|
||
{
|
||
std::string str = edt_b->GetString();
|
||
Buffer buf;
|
||
if (Crypto::DecodeBase64(str, buf))
|
||
{
|
||
edt_a->SetString(to_string(buf));
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
}
|
||
}
|
||
};
|
||
fn_run();
|
||
}
|
||
|
||
void UICrypto::_init_md5()
|
||
{
|
||
{
|
||
UI::Panel*& panel = _panelMd5A;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_A);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
{
|
||
UI::Panel*& panel = _panelMd5B;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_B);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
}
|
||
|
||
void UICrypto::_run_md5()
|
||
{
|
||
_panelMd5A->Update();
|
||
_panelMd5B->Update();
|
||
|
||
auto fn_run = [&]()
|
||
{
|
||
UI::EditBox* edt_a = _panelMd5A->ExGetEditBox(0);
|
||
UI::EditBox* edt_a_16 = _panelMd5A->ExGetEditBox(1);
|
||
UI::EditBox* edt_b = _panelMd5B->ExGetEditBox(0);
|
||
assert(edt_a && edt_b && edt_a_16);
|
||
if (!(edt_a && edt_b && edt_a_16))
|
||
return;
|
||
|
||
if (edt_a->IsChange())
|
||
{
|
||
std::string str = edt_a->GetString();
|
||
BufferView buf = CreateBufferView(str);
|
||
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
|
||
auto ret = Crypto::HashMd5(buf);
|
||
edt_b->SetString(to_string_hex(ret));
|
||
}
|
||
};
|
||
fn_run();
|
||
}
|
||
|
||
void UICrypto::_init_crc32()
|
||
{
|
||
{
|
||
UI::Panel*& panel = _panelCrc32A;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_A);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("utf8格式");
|
||
panel->Add(edt);
|
||
}
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
|
||
{
|
||
UI::Panel*& panel = _panelCrc32B;
|
||
panel = g_ui->CreatePanel();
|
||
panel->SetPosScale({ 0.0f, 0.0f });
|
||
panel->SetPosPixel(POS_CONTENT_B);
|
||
panel->SetAutoRun(false);
|
||
panel->SetLocator(createLocatorY(160));
|
||
|
||
{
|
||
UI::EditBox* edt = g_ui->CreateEditBoxDefault(false);
|
||
edt->SetStringTip("16进制");
|
||
panel->Add(edt);
|
||
}
|
||
}
|
||
}
|
||
|
||
void UICrypto::_run_crc32()
|
||
{
|
||
_panelCrc32A->Update();
|
||
_panelCrc32B->Update();
|
||
|
||
auto fn_run = [&]()
|
||
{
|
||
UI::EditBox* edt_a = _panelCrc32A->ExGetEditBox(0);
|
||
UI::EditBox* edt_a_16 = _panelCrc32A->ExGetEditBox(1);
|
||
UI::EditBox* edt_b = _panelCrc32B->ExGetEditBox(0);
|
||
assert(edt_a && edt_b && edt_a_16);
|
||
if (!(edt_a && edt_b && edt_a_16))
|
||
return;
|
||
|
||
if (edt_a->IsChange())
|
||
{
|
||
std::string str = edt_a->GetString();
|
||
BufferView buf = CreateBufferView(str);
|
||
|
||
edt_a_16->SetString(to_string_hex(buf));
|
||
|
||
uint32_t ret = Crypto::HashCrc32(buf);
|
||
edt_b->SetString(to_string(ret));
|
||
}
|
||
};
|
||
fn_run();
|
||
}
|