Files
dl/project/dl_test/ui_crypto.cpp
T
2026-09-16 14:07:40 +08:00

477 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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();
}