#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(); }