Initial commit to new repository

This commit is contained in:
2026-04-03 18:22:19 +09:00
commit 4458bb0f52
7672 changed files with 452440 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<AssemblyName>AxKeyEncryptor</AssemblyName>
<RootNamespace>AxKeyEncryptor</RootNamespace>
<ApplicationIcon>Resources\icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="8.0.0"/>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\icon.ico" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,85 @@
using System.Security.Cryptography;
using System.Text;
namespace AxKeyEncryptor;
/// <summary>
/// 앱 공용 키(Portable) 암호화/복호화 — CryptoService.cs와 동일한 로직.
/// </summary>
internal static class CryptoHelper
{
private static readonly byte[] AppSeed =
{
// "AX-Commander-Key-0104-sj.baeck" + 2-byte pad
0x41, 0x58, 0x2D, 0x43, 0x6F, 0x6D, 0x6D, 0x61,
0x6E, 0x64, 0x65, 0x72, 0x2D, 0x4B, 0x65, 0x79,
0x2D, 0x30, 0x31, 0x30, 0x34, 0x2D, 0x73, 0x6A,
0x2E, 0x62, 0x61, 0x65, 0x63, 0x6B, 0xA7, 0x5C
};
private static readonly byte[] AppSalt =
{
0x58, 0x43, 0x4D, 0x44, 0x53, 0x61, 0x6C, 0x74,
0x9E, 0x27, 0xC1, 0x4A, 0xB3, 0x06, 0x7F, 0xD8
};
private static byte[]? _appKey;
private static byte[] GetAppKey()
{
if (_appKey != null) return _appKey;
using var pbkdf2 = new Rfc2898DeriveBytes(AppSeed, AppSalt, 100_000, HashAlgorithmName.SHA256);
_appKey = pbkdf2.GetBytes(32);
return _appKey;
}
public static string Encrypt(string plainText)
{
if (string.IsNullOrEmpty(plainText)) return "";
var key = GetAppKey();
using var aes = Aes.Create();
aes.Key = key;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.GenerateIV();
using var enc = aes.CreateEncryptor();
var plainBytes = Encoding.UTF8.GetBytes(plainText);
var cipher = enc.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
var result = new byte[16 + cipher.Length];
Buffer.BlockCopy(aes.IV, 0, result, 0, 16);
Buffer.BlockCopy(cipher, 0, result, 16, cipher.Length);
return Convert.ToBase64String(result);
}
public static (bool Success, string Result) Decrypt(string base64)
{
if (string.IsNullOrEmpty(base64)) return (false, "입력이 비어 있습니다.");
try
{
var raw = Convert.FromBase64String(base64);
if (raw.Length < 17) return (false, "데이터가 너무 짧습니다.");
var key = GetAppKey();
var iv = new byte[16];
Buffer.BlockCopy(raw, 0, iv, 0, 16);
var cipher = new byte[raw.Length - 16];
Buffer.BlockCopy(raw, 16, cipher, 0, cipher.Length);
using var aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using var dec = aes.CreateDecryptor();
var plain = dec.TransformFinalBlock(cipher, 0, cipher.Length);
return (true, Encoding.UTF8.GetString(plain));
}
catch (Exception ex)
{
return (false, $"복호화 오류: {ex.Message}");
}
}
}

View File

@@ -0,0 +1,754 @@
using System.Drawing.Drawing2D;
using System.Text.Json;
namespace AxKeyEncryptor;
/// <summary>
/// AX Copilot — Settings Encryptor (개발자 전용)
/// Ollama / vLLM / Gemini 3종 서비스에 대한 설정값 암호화 UI
/// </summary>
public class MainForm : Form
{
// ── 색상 테마 ───────────────────────────────────────────────────
private static readonly Color BgDark = Color.FromArgb(24, 24, 32);
private static readonly Color BgPanel = Color.FromArgb(32, 34, 46);
private static readonly Color BgCard = Color.FromArgb(42, 44, 58);
private static readonly Color BgInput = Color.FromArgb(52, 54, 70);
private static readonly Color AccentBlue = Color.FromArgb(88, 130, 255);
private static readonly Color AccentGreen = Color.FromArgb(80, 200, 120);
private static readonly Color AccentOrange= Color.FromArgb(255, 160, 60);
private static readonly Color AccentRed = Color.FromArgb(255, 90, 90);
private static readonly Color TextPrimary = Color.FromArgb(230, 232, 240);
private static readonly Color TextSecondary= Color.FromArgb(140, 145, 170);
private static readonly Color BorderColor = Color.FromArgb(60, 64, 80);
// ── 서비스별 탭 컨트롤 ──────────────────────────────────────────
private TabControl _tabs = null!;
// Ollama 탭 컨트롤
private TextBox _ollamaEndpoint = null!;
private TextBox _ollamaModel = null!;
private TextBox _ollamaEncEndpoint = null!;
private TextBox _ollamaEncModel = null!;
// vLLM 탭 컨트롤
private TextBox _vllmEndpoint = null!;
private TextBox _vllmModel = null!;
private TextBox _vllmApiKey = null!;
private TextBox _vllmEncEndpoint = null!;
private TextBox _vllmEncModel = null!;
private TextBox _vllmEncApiKey = null!;
// Gemini 탭 컨트롤
private TextBox _geminiApiKey = null!;
private TextBox _geminiModel = null!;
private TextBox _geminiEncApiKey = null!;
private TextBox _geminiEncModel = null!;
// 하단 공용
private RichTextBox _outputBox = null!;
private TextBox _decryptInput = null!;
private TextBox _decryptResult = null!;
public MainForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
// ── 폼 기본 설정 ────────────────────────────────────────
Text = "AX Copilot — Settings Encryptor";
Size = new Size(760, 680);
MinimumSize = new Size(720, 620);
StartPosition = FormStartPosition.CenterScreen;
BackColor = BgDark;
ForeColor = TextPrimary;
Font = new Font("Segoe UI", 9.5f, FontStyle.Regular);
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
// 아이콘 설정
try
{
var asm = System.Reflection.Assembly.GetExecutingAssembly();
var stream = asm.GetManifestResourceStream("AxKeyEncryptor.Resources.icon.ico");
if (stream != null) Icon = new Icon(stream);
}
catch { }
// ── 헤더 패널 ──────────────────────────────────────────
var headerPanel = new Panel
{
Dock = DockStyle.Top,
Height = 60,
BackColor = Color.Transparent
};
headerPanel.Paint += (s, e) =>
{
using var brush = new LinearGradientBrush(
headerPanel.ClientRectangle,
Color.FromArgb(35, 40, 65),
Color.FromArgb(24, 24, 32),
LinearGradientMode.Vertical);
e.Graphics.FillRectangle(brush, headerPanel.ClientRectangle);
// 타이틀
using var titleFont = new Font("Segoe UI", 14f, FontStyle.Bold);
e.Graphics.DrawString("🔐 AX Copilot — Settings Encryptor",
titleFont, new SolidBrush(TextPrimary), 20, 8);
// 서브타이틀
using var subFont = new Font("Segoe UI", 8.5f, FontStyle.Regular);
e.Graphics.DrawString("AES-256-CBC 앱 공용 키 암호화 · 모든 PC에서 동일 복호화 · 개발자 전용",
subFont, new SolidBrush(TextSecondary), 48, 36);
};
Controls.Add(headerPanel);
// ── 메인 컨텐츠 패널 ────────────────────────────────────
var mainPanel = new Panel
{
Dock = DockStyle.Fill,
Padding = new Padding(16, 8, 16, 16),
BackColor = BgDark
};
Controls.Add(mainPanel);
// ── 서비스 선택 탭 ──────────────────────────────────────
_tabs = new TabControl
{
Dock = DockStyle.Top,
Height = 260,
Font = new Font("Segoe UI", 10f, FontStyle.Regular),
Padding = new Point(12, 6)
};
_tabs.DrawMode = TabDrawMode.OwnerDrawFixed;
_tabs.DrawItem += DrawTab;
_tabs.SizeMode = TabSizeMode.Fixed;
_tabs.ItemSize = new Size(160, 36);
// Ollama 탭
var ollamaPage = CreateTabPage("🟢 Ollama", AccentGreen);
BuildOllamaTab(ollamaPage);
_tabs.TabPages.Add(ollamaPage);
// vLLM 탭
var vllmPage = CreateTabPage("🔵 vLLM (OpenAI)", AccentBlue);
BuildVllmTab(vllmPage);
_tabs.TabPages.Add(vllmPage);
// Gemini 탭
var geminiPage = CreateTabPage("🟠 Gemini", AccentOrange);
BuildGeminiTab(geminiPage);
_tabs.TabPages.Add(geminiPage);
// 복호화 검증 탭 추가
var toolsPage = CreateTabPage("🔓 복호화 검증", AccentBlue);
BuildToolsTab(toolsPage);
_tabs.TabPages.Add(toolsPage);
mainPanel.Controls.Add(_tabs);
// ── 출력 로그 섹션 ──────────────────────────────────────
var outputLabel = CreateLabel("📋 출력 로그", 10f, FontStyle.Bold);
outputLabel.Dock = DockStyle.Top;
outputLabel.Height = 28;
outputLabel.Padding = new Padding(4, 8, 0, 0);
mainPanel.Controls.Add(outputLabel);
_outputBox = new RichTextBox
{
Dock = DockStyle.Fill,
BackColor = Color.FromArgb(18, 18, 24),
ForeColor = TextPrimary,
Font = new Font("Cascadia Code", 9.5f, FontStyle.Regular, GraphicsUnit.Point, 0,
// fallback if Cascadia Code not installed
false),
BorderStyle = BorderStyle.None,
ReadOnly = true,
WordWrap = true,
Padding = new Padding(8)
};
// Cascadia Code fallback
if (_outputBox.Font.Name != "Cascadia Code")
_outputBox.Font = new Font("Consolas", 9.5f);
mainPanel.Controls.Add(_outputBox);
// ── 하단 상태바 ─────────────────────────────────────────
var statusBar = new Panel
{
Dock = DockStyle.Bottom,
Height = 30,
BackColor = Color.FromArgb(20, 22, 30)
};
var statusLabel = CreateLabel(" AES-256-CBC · PBKDF2 100K iterations · 모든 PC에서 동일한 암호화 키", 8f, FontStyle.Regular);
statusLabel.ForeColor = TextSecondary;
statusLabel.Dock = DockStyle.Fill;
statusLabel.TextAlign = ContentAlignment.MiddleLeft;
statusBar.Controls.Add(statusLabel);
Controls.Add(statusBar);
// ── 컨트롤 순서 (뒤에서 앞으로) ──────────────────────────
// Panel DockStyle 순서 보장
Controls.SetChildIndex(statusBar, 0);
Controls.SetChildIndex(headerPanel, 0);
mainPanel.Controls.SetChildIndex(_outputBox, 0);
mainPanel.Controls.SetChildIndex(outputLabel, 0);
mainPanel.Controls.SetChildIndex(_tabs, 0);
AppendLog("AX Copilot Settings Encryptor 시작됨", AccentGreen);
AppendLog("", TextSecondary);
AppendLog("── 사용 방법 ──────────────────────────────────────────", AccentBlue);
AppendLog("1. 상단 탭에서 LLM 서비스(Ollama/vLLM/Gemini)를 선택합니다.", TextPrimary);
AppendLog("2. 각 필드에 평문 값(URL, 모델명, API 키)을 입력합니다.", TextPrimary);
AppendLog("3. [⚡ 전체 암호화] 버튼으로 모든 필드를 한번에 암호화합니다.", TextPrimary);
AppendLog("4. [📋 settings.json 복사] 버튼으로 암호화된 JSON을 클립보드에 복사합니다.", TextPrimary);
AppendLog("5. 복사된 JSON을 settings.json 파일의 llm 섹션에 붙여넣으면 완료!", TextPrimary);
AppendLog("", TextSecondary);
AppendLog("── 암호화 방식 ────────────────────────────────────────", AccentBlue);
AppendLog("• AES-256-CBC + PBKDF2(100K iterations, SHA256)", TextSecondary);
AppendLog("• 앱 공용 키 방식 — 모든 PC에서 동일한 키로 복호화됩니다.", TextSecondary);
AppendLog("• 배포 시 settings.json에 암호화된 값을 넣으면 앱이 자동 복호화합니다.", TextSecondary);
AppendLog("", TextSecondary);
}
// ═════════════════════════════════════════════════════════════════
// Ollama 탭 빌드
// ═════════════════════════════════════════════════════════════════
private void BuildOllamaTab(TabPage page)
{
int y = 12;
var desc = CreateLabel("Ollama는 로컬 LLM 서버입니다. API 키가 필요 없습니다.", 9f, FontStyle.Italic);
desc.ForeColor = TextSecondary;
desc.Location = new Point(12, y);
desc.AutoSize = true;
page.Controls.Add(desc);
y += 30;
// Endpoint
AddFieldPair(page, ref y, "Endpoint URL:", "http://localhost:11434",
out _ollamaEndpoint, out _ollamaEncEndpoint, "암호화", AccentGreen, (s, e) =>
{
EncryptAndShow(_ollamaEndpoint, _ollamaEncEndpoint, "Ollama Endpoint");
});
// Model
AddFieldPair(page, ref y, "Model:", "llama3.1:8b",
out _ollamaModel, out _ollamaEncModel, "암호화", AccentGreen, (s, e) =>
{
EncryptAndShow(_ollamaModel, _ollamaEncModel, "Ollama Model");
});
// 전체 암호화 버튼
var btnAll = CreateButton("⚡ 전체 암호화", AccentGreen);
btnAll.Location = new Point(12, y + 4);
btnAll.Size = new Size(130, 34);
btnAll.Click += (s, e) =>
{
EncryptAndShow(_ollamaEndpoint, _ollamaEncEndpoint, "Ollama Endpoint");
EncryptAndShow(_ollamaModel, _ollamaEncModel, "Ollama Model");
AppendLog("[Ollama] 전체 암호화 완료 ✔", AccentGreen);
};
page.Controls.Add(btnAll);
// JSON 생성 버튼
var btnJson = CreateButton("📋 settings.json 복사", AccentGreen);
btnJson.Location = new Point(150, y + 4);
btnJson.Size = new Size(200, 34);
btnJson.Click += (s, e) => GenerateOllamaJson();
page.Controls.Add(btnJson);
}
// ═════════════════════════════════════════════════════════════════
// vLLM 탭 빌드
// ═════════════════════════════════════════════════════════════════
private void BuildVllmTab(TabPage page)
{
int y = 12;
var desc = CreateLabel("vLLM은 OpenAI 호환 API 서버입니다. API 키는 선택사항입니다.", 9f, FontStyle.Italic);
desc.ForeColor = TextSecondary;
desc.Location = new Point(12, y);
desc.AutoSize = true;
page.Controls.Add(desc);
y += 30;
// Endpoint
AddFieldPair(page, ref y, "Endpoint URL:", "http://localhost:8000",
out _vllmEndpoint, out _vllmEncEndpoint, "암호화", AccentBlue, (s, e) =>
{
EncryptAndShow(_vllmEndpoint, _vllmEncEndpoint, "vLLM Endpoint");
});
// Model
AddFieldPair(page, ref y, "Model:", "meta-llama/Llama-3.1-8B-Instruct",
out _vllmModel, out _vllmEncModel, "암호화", AccentBlue, (s, e) =>
{
EncryptAndShow(_vllmModel, _vllmEncModel, "vLLM Model");
});
// API Key
AddFieldPair(page, ref y, "API Key (선택):", "",
out _vllmApiKey, out _vllmEncApiKey, "암호화", AccentBlue, (s, e) =>
{
EncryptAndShow(_vllmApiKey, _vllmEncApiKey, "vLLM API Key");
});
var btnAll = CreateButton("⚡ 전체 암호화", AccentBlue);
btnAll.Location = new Point(12, y + 4);
btnAll.Size = new Size(130, 34);
btnAll.Click += (s, e) =>
{
EncryptAndShow(_vllmEndpoint, _vllmEncEndpoint, "vLLM Endpoint");
EncryptAndShow(_vllmModel, _vllmEncModel, "vLLM Model");
if (!string.IsNullOrEmpty(_vllmApiKey.Text.Trim()))
EncryptAndShow(_vllmApiKey, _vllmEncApiKey, "vLLM API Key");
AppendLog("[vLLM] 전체 암호화 완료 ✔", AccentGreen);
};
page.Controls.Add(btnAll);
var btnJson = CreateButton("📋 settings.json 복사", AccentBlue);
btnJson.Location = new Point(150, y + 4);
btnJson.Size = new Size(200, 34);
btnJson.Click += (s, e) => GenerateVllmJson();
page.Controls.Add(btnJson);
}
// ═════════════════════════════════════════════════════════════════
// Gemini 탭 빌드
// ═════════════════════════════════════════════════════════════════
private void BuildGeminiTab(TabPage page)
{
int y = 12;
var desc = CreateLabel("Google Gemini API를 사용합니다. API Key가 필수입니다.", 9f, FontStyle.Italic);
desc.ForeColor = TextSecondary;
desc.Location = new Point(12, y);
desc.AutoSize = true;
page.Controls.Add(desc);
y += 30;
// API Key
AddFieldPair(page, ref y, "API Key (필수):", "",
out _geminiApiKey, out _geminiEncApiKey, "암호화", AccentOrange, (s, e) =>
{
EncryptAndShow(_geminiApiKey, _geminiEncApiKey, "Gemini API Key");
});
// Model
AddFieldPair(page, ref y, "Model:", "gemini-2.0-flash",
out _geminiModel, out _geminiEncModel, "암호화", AccentOrange, (s, e) =>
{
EncryptAndShow(_geminiModel, _geminiEncModel, "Gemini Model");
});
var btnAll = CreateButton("⚡ 전체 암호화", AccentOrange);
btnAll.Location = new Point(12, y + 4);
btnAll.Size = new Size(130, 34);
btnAll.Click += (s, e) =>
{
EncryptAndShow(_geminiApiKey, _geminiEncApiKey, "Gemini API Key");
EncryptAndShow(_geminiModel, _geminiEncModel, "Gemini Model");
AppendLog("[Gemini] 전체 암호화 완료 ✔", AccentGreen);
};
page.Controls.Add(btnAll);
var btnJson = CreateButton("📋 settings.json 복사", AccentOrange);
btnJson.Location = new Point(150, y + 4);
btnJson.Size = new Size(200, 34);
btnJson.Click += (s, e) => GenerateGeminiJson();
page.Controls.Add(btnJson);
}
// ═════════════════════════════════════════════════════════════════
// 필드 쌍 헬퍼 (라벨 + 입력 + 암호화 버튼 + 결과)
// ═════════════════════════════════════════════════════════════════
// ═══════════════════════════════════════════════════════════════════════
// 복호화 검증 탭
// ═══════════════════════════════════════════════════════════════════════
private void BuildToolsTab(TabPage page)
{
int y = 12;
var desc = CreateLabel("암호화된 Base64 값을 붙여넣고 원문을 확인합니다.", 9f, FontStyle.Italic);
desc.ForeColor = TextSecondary;
desc.Location = new Point(12, y);
desc.AutoSize = true;
page.Controls.Add(desc);
y += 30;
var inputLabel = CreateLabel("암호화된 값 (Base64):", 9f, FontStyle.Regular);
inputLabel.Location = new Point(12, y);
inputLabel.AutoSize = true;
page.Controls.Add(inputLabel);
y += 20;
_decryptInput = CreateTextBox();
_decryptInput.Location = new Point(12, y);
_decryptInput.Size = new Size(440, 28);
page.Controls.Add(_decryptInput);
var btnDecrypt = CreateButton("복호화", AccentBlue);
btnDecrypt.Location = new Point(460, y - 1);
btnDecrypt.Size = new Size(80, 30);
btnDecrypt.Click += BtnDecrypt_Click;
page.Controls.Add(btnDecrypt);
var btnVerify = CreateButton("왕복 검증", Color.FromArgb(130, 100, 220));
btnVerify.Location = new Point(546, y - 1);
btnVerify.Size = new Size(90, 30);
btnVerify.Click += BtnVerify_Click;
page.Controls.Add(btnVerify);
y += 40;
var resultLabel = CreateLabel("복호화 결과:", 9f, FontStyle.Regular);
resultLabel.Location = new Point(12, y);
resultLabel.AutoSize = true;
page.Controls.Add(resultLabel);
y += 20;
_decryptResult = CreateTextBox();
_decryptResult.Location = new Point(12, y);
_decryptResult.Size = new Size(624, 28);
_decryptResult.ReadOnly = true;
page.Controls.Add(_decryptResult);
}
private void AddFieldPair(TabPage page, ref int y,
string labelText, string placeholder,
out TextBox input, out TextBox encrypted,
string buttonText, Color accentColor, EventHandler onClick)
{
var lbl = CreateLabel(labelText, 9f, FontStyle.Regular);
lbl.Location = new Point(12, y);
lbl.AutoSize = true;
page.Controls.Add(lbl);
y += 22;
input = CreateTextBox();
input.Location = new Point(12, y);
input.Size = new Size(310, 28);
input.PlaceholderText = placeholder;
if (!string.IsNullOrEmpty(placeholder) && placeholder.StartsWith("http"))
input.Text = placeholder;
page.Controls.Add(input);
var btn = CreateButton(buttonText, accentColor);
btn.Location = new Point(328, y - 1);
btn.Size = new Size(70, 30);
btn.Click += onClick;
page.Controls.Add(btn);
encrypted = CreateTextBox();
encrypted.Location = new Point(404, y);
encrypted.Size = new Size(238, 28);
encrypted.ReadOnly = true;
encrypted.PlaceholderText = "암호화 결과";
page.Controls.Add(encrypted);
// 복사 버튼
var btnCopy = CreateCopyButton(encrypted);
btnCopy.Location = new Point(646, y);
btnCopy.Size = new Size(28, 28);
page.Controls.Add(btnCopy);
y += 40;
}
// ═════════════════════════════════════════════════════════════════
// 암호화 실행
// ═════════════════════════════════════════════════════════════════
private void EncryptAndShow(TextBox input, TextBox output, string fieldName)
{
var text = input.Text.Trim();
if (string.IsNullOrEmpty(text))
{
AppendLog($"[{fieldName}] 입력이 비어 있습니다.", AccentRed);
return;
}
var enc = CryptoHelper.Encrypt(text);
output.Text = enc;
AppendLog($"[{fieldName}] 암호화 완료 ✔", AccentGreen);
AppendLog($" 원본: {text}", TextSecondary);
AppendLog($" 결과: {enc}", TextPrimary);
}
// ═════════════════════════════════════════════════════════════════
// 복호화
// ═════════════════════════════════════════════════════════════════
private void BtnDecrypt_Click(object? sender, EventArgs e)
{
var b64 = _decryptInput.Text.Trim();
if (string.IsNullOrEmpty(b64))
{
AppendLog("[복호화] 입력이 비어 있습니다.", AccentRed);
return;
}
var (success, result) = CryptoHelper.Decrypt(b64);
_decryptResult.Text = result;
if (success)
{
_decryptResult.ForeColor = AccentGreen;
AppendLog($"[복호화] 성공 ✔ → {result}", AccentGreen);
}
else
{
_decryptResult.ForeColor = AccentRed;
AppendLog($"[복호화] 실패 ✘ — {result}", AccentRed);
}
}
// ═════════════════════════════════════════════════════════════════
// 왕복 검증
// ═════════════════════════════════════════════════════════════════
private void BtnVerify_Click(object? sender, EventArgs e)
{
var b64 = _decryptInput.Text.Trim();
string testText;
if (string.IsNullOrEmpty(b64))
{
testText = "test-api-key-12345";
AppendLog("[왕복 검증] 테스트 문자열 사용: " + testText, TextSecondary);
}
else
{
// 이미 암호화된 값이면 복호화 → 재암호화 → 재복호화
var (ok, dec) = CryptoHelper.Decrypt(b64);
if (ok) testText = dec;
else testText = b64; // 평문으로 간주
}
var encrypted = CryptoHelper.Encrypt(testText);
var (success, decrypted) = CryptoHelper.Decrypt(encrypted);
var match = success && testText == decrypted;
_decryptResult.Text = match ? $"✅ 일치 — {decrypted}" : $"❌ 불일치";
_decryptResult.ForeColor = match ? AccentGreen : AccentRed;
AppendLog("[왕복 검증]", AccentBlue);
AppendLog($" 원본: {testText}", TextSecondary);
AppendLog($" 암호화: {encrypted}", TextSecondary);
AppendLog($" 복호화: {decrypted}", TextSecondary);
AppendLog($" 결과: {(match ? " " : " ")}", match ? AccentGreen : AccentRed);
}
// ═════════════════════════════════════════════════════════════════
// JSON 생성 (서비스별)
// ═════════════════════════════════════════════════════════════════
private void GenerateOllamaJson()
{
var endpoint = _ollamaEncEndpoint.Text;
var model = _ollamaEncModel.Text;
if (string.IsNullOrEmpty(endpoint)) endpoint = CryptoHelper.Encrypt(_ollamaEndpoint.Text);
if (string.IsNullOrEmpty(model)) model = CryptoHelper.Encrypt(_ollamaModel.Text);
var json = JsonSerializer.Serialize(new
{
llm = new
{
service = "ollama",
encryptedEndpoint = endpoint,
encryptedModel = model,
streaming = true,
maxContextTokens = 4096,
temperature = 0.7
}
}, new JsonSerializerOptions { WriteIndented = true });
CopyToClipboard(json, "Ollama");
}
private void GenerateVllmJson()
{
var endpoint = _vllmEncEndpoint.Text;
var model = _vllmEncModel.Text;
var apiKey = _vllmEncApiKey.Text;
if (string.IsNullOrEmpty(endpoint)) endpoint = CryptoHelper.Encrypt(_vllmEndpoint.Text);
if (string.IsNullOrEmpty(model)) model = CryptoHelper.Encrypt(_vllmModel.Text);
if (string.IsNullOrEmpty(apiKey) && !string.IsNullOrEmpty(_vllmApiKey.Text))
apiKey = CryptoHelper.Encrypt(_vllmApiKey.Text);
var obj = new Dictionary<string, object>
{
["llm"] = new Dictionary<string, object>
{
["service"] = "vllm",
["encryptedEndpoint"] = endpoint,
["encryptedModel"] = model,
["encryptedApiKey"] = apiKey ?? "",
["streaming"] = true,
["maxContextTokens"] = 4096,
["temperature"] = 0.7
}
};
var json = JsonSerializer.Serialize(obj, new JsonSerializerOptions { WriteIndented = true });
CopyToClipboard(json, "vLLM");
}
private void GenerateGeminiJson()
{
var apiKey = _geminiEncApiKey.Text;
var model = _geminiEncModel.Text;
if (string.IsNullOrEmpty(apiKey))
{
if (string.IsNullOrEmpty(_geminiApiKey.Text))
{
AppendLog("[Gemini] API Key는 필수입니다!", AccentRed);
return;
}
apiKey = CryptoHelper.Encrypt(_geminiApiKey.Text);
}
if (string.IsNullOrEmpty(model)) model = CryptoHelper.Encrypt(_geminiModel.Text);
var json = JsonSerializer.Serialize(new
{
llm = new
{
service = "gemini",
encryptedApiKey = apiKey,
encryptedModel = model,
streaming = true,
maxContextTokens = 8192,
temperature = 0.7
}
}, new JsonSerializerOptions { WriteIndented = true });
CopyToClipboard(json, "Gemini");
}
private void CopyToClipboard(string json, string serviceName)
{
Clipboard.SetText(json);
AppendLog($"[{serviceName}] settings.json 설정값이 클립보드에 복사되었습니다! 📋", AccentGreen);
AppendLog(json, TextSecondary);
AppendLog("", TextSecondary);
// 짧은 알림
var tip = new ToolTip();
tip.Show($"{serviceName} 설정이 클립보드에 복사됨!", this, Width / 2 - 100, Height - 60, 2000);
}
// ═════════════════════════════════════════════════════════════════
// 출력 로그
// ═════════════════════════════════════════════════════════════════
private void AppendLog(string text, Color color)
{
_outputBox.SelectionStart = _outputBox.TextLength;
_outputBox.SelectionLength = 0;
_outputBox.SelectionColor = color;
_outputBox.AppendText(text + Environment.NewLine);
_outputBox.ScrollToCaret();
}
// ═════════════════════════════════════════════════════════════════
// UI 팩토리 헬퍼
// ═════════════════════════════════════════════════════════════════
private static Label CreateLabel(string text, float fontSize, FontStyle style)
{
return new Label
{
Text = text,
ForeColor = TextPrimary,
Font = new Font("Segoe UI", fontSize, style),
AutoSize = true
};
}
private static TextBox CreateTextBox()
{
return new TextBox
{
BackColor = BgInput,
ForeColor = TextPrimary,
Font = new Font("Segoe UI", 10f),
BorderStyle = BorderStyle.FixedSingle
};
}
private Button CreateButton(string text, Color bgColor)
{
var btn = new Button
{
Text = text,
BackColor = bgColor,
ForeColor = Color.White,
FlatStyle = FlatStyle.Flat,
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
Cursor = Cursors.Hand
};
btn.FlatAppearance.BorderSize = 0;
btn.FlatAppearance.MouseOverBackColor = ControlPaint.Light(bgColor, 0.15f);
btn.FlatAppearance.MouseDownBackColor = ControlPaint.Dark(bgColor, 0.1f);
return btn;
}
private Button CreateCopyButton(TextBox target)
{
var btn = new Button
{
Text = "📋",
BackColor = BgCard,
ForeColor = TextPrimary,
FlatStyle = FlatStyle.Flat,
Font = new Font("Segoe UI", 9f),
Cursor = Cursors.Hand
};
btn.FlatAppearance.BorderSize = 1;
btn.FlatAppearance.BorderColor = BorderColor;
btn.Click += (s, e) =>
{
if (!string.IsNullOrEmpty(target.Text))
{
Clipboard.SetText(target.Text);
var tip = new ToolTip();
tip.Show("복사됨!", btn, 0, -20, 1200);
}
};
return btn;
}
private TabPage CreateTabPage(string title, Color accentColor)
{
var page = new TabPage(title)
{
BackColor = BgPanel,
ForeColor = TextPrimary,
Padding = new Padding(4)
};
page.Tag = accentColor; // 탭 드로잉에 사용
return page;
}
private void DrawTab(object? sender, DrawItemEventArgs e)
{
if (sender is not TabControl tabs) return;
var page = tabs.TabPages[e.Index];
var isSelected = e.Index == tabs.SelectedIndex;
var accent = page.Tag is Color c ? c : AccentBlue;
// 배경
var bgColor = isSelected ? BgCard : BgPanel;
using var bgBrush = new SolidBrush(bgColor);
e.Graphics.FillRectangle(bgBrush, e.Bounds);
// 선택된 탭 하단 악센트 라인
if (isSelected)
{
using var lineBrush = new SolidBrush(accent);
e.Graphics.FillRectangle(lineBrush,
new Rectangle(e.Bounds.Left, e.Bounds.Bottom - 3, e.Bounds.Width, 3));
}
// 텍스트
var textColor = isSelected ? TextPrimary : TextSecondary;
using var textBrush = new SolidBrush(textColor);
var textFont = isSelected
? new Font("Segoe UI", 10f, FontStyle.Bold)
: new Font("Segoe UI", 9.5f, FontStyle.Regular);
var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
e.Graphics.DrawString(page.Text, textFont, textBrush, e.Bounds, sf);
textFont.Dispose();
}
}

View File

@@ -0,0 +1,11 @@
namespace AxKeyEncryptor;
static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"AxKeyEncryptor/1.0.0": {
"runtime": {
"AxKeyEncryptor.dll": {}
}
}
}
},
"libraries": {
"AxKeyEncryptor/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,18 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.0"
}
],
"configProperties": {
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
}
}
}

View File

@@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"AxKeyEncryptor/1.0.0": {
"runtime": {
"AxKeyEncryptor.dll": {}
}
}
}
},
"libraries": {
"AxKeyEncryptor/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,19 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.0"
}
],
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
}
}
}

View File

@@ -0,0 +1,78 @@
{
"format": 1,
"restore": {
"E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj": {}
},
"projects": {
"E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj",
"projectName": "AxKeyEncryptor",
"projectPath": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj",
"packagesPath": "C:\\Users\\admin\\.nuget\\packages\\",
"outputPath": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "10.0.200"
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"dependencies": {
"System.Security.Cryptography.ProtectedData": {
"target": "Package",
"version": "[8.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\admin\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\admin\.nuget\packages\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9f25d92808b4f98a7ffa19fb6da350ada44e207a")]
[assembly: System.Reflection.AssemblyProductAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyTitleAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.

View File

@@ -0,0 +1 @@
7f75bcca7b051b96013e1a0a8e40b216a41ee0d4695b4ef5bb2c3366f6112f65

View File

@@ -0,0 +1,24 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v8.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = AxKeyEncryptor
build_property.ProjectDir = E:\AX Copilot - Codex\src\AxKeyEncryptor\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,10 @@
// <auto-generated/>
global using System;
global using System.Collections.Generic;
global using System.Drawing;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
global using System.Windows.Forms;

View File

@@ -0,0 +1 @@
2afc5e8e76c2d39d447e7036ce58906507efb4e8d1556a5db37a4ec85186b8c1

View File

@@ -0,0 +1,42 @@
E:\AX Commander\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.exe
E:\AX Commander\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.deps.json
E:\AX Commander\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.runtimeconfig.json
E:\AX Commander\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.GeneratedMSBuildEditorConfig.editorconfig
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfoInputs.cache
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfo.cs
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.csproj.CoreCompileInputs.cache
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\refint\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.genruntimeconfig.cache
E:\AX Commander\src\AxKeyEncryptor\obj\Debug\net8.0-windows\ref\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.exe
E:\AX Copilot\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.deps.json
E:\AX Copilot\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.runtimeconfig.json
E:\AX Copilot\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.GeneratedMSBuildEditorConfig.editorconfig
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfoInputs.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfo.cs
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.csproj.CoreCompileInputs.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\refint\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.genruntimeconfig.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Debug\net8.0-windows\ref\AxKeyEncryptor.dll
E:\AX Copilot - Codex\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.exe
E:\AX Copilot - Codex\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.deps.json
E:\AX Copilot - Codex\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.runtimeconfig.json
E:\AX Copilot - Codex\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot - Codex\src\AxKeyEncryptor\bin\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.GeneratedMSBuildEditorConfig.editorconfig
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfoInputs.cache
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.AssemblyInfo.cs
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.csproj.CoreCompileInputs.cache
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\refint\AxKeyEncryptor.dll
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\AxKeyEncryptor.genruntimeconfig.cache
E:\AX Copilot - Codex\src\AxKeyEncryptor\obj\Debug\net8.0-windows\ref\AxKeyEncryptor.dll

View File

@@ -0,0 +1 @@
f22f7284002b1a0b7ebfe517e4d06e43211862e89df3755bdda9f1686ed28dd7

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyTitleAttribute("AxKeyEncryptor")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.

View File

@@ -0,0 +1 @@
fd628c4965ee6878cb7f295c46b126ed27906b8074767f39b1e9ecba1944035c

View File

@@ -0,0 +1,24 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v8.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = AxKeyEncryptor
build_property.ProjectDir = E:\AX Copilot\src\AxKeyEncryptor\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,10 @@
// <auto-generated/>
global using System;
global using System.Collections.Generic;
global using System.Drawing;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
global using System.Windows.Forms;

View File

@@ -0,0 +1 @@
634a8bbb8f424f3006a2950ddd75ba537e46918915120c2cff2107efffe8de24

View File

@@ -0,0 +1,28 @@
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.GeneratedMSBuildEditorConfig.editorconfig
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.AssemblyInfoInputs.cache
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.AssemblyInfo.cs
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.csproj.CoreCompileInputs.cache
E:\AX Commander\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.exe
E:\AX Commander\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.deps.json
E:\AX Commander\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.runtimeconfig.json
E:\AX Commander\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\refint\AxKeyEncryptor.dll
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.genruntimeconfig.cache
E:\AX Commander\src\AxKeyEncryptor\obj\Release\net8.0-windows\ref\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.exe
E:\AX Copilot\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.deps.json
E:\AX Copilot\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.runtimeconfig.json
E:\AX Copilot\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\bin\Release\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.GeneratedMSBuildEditorConfig.editorconfig
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.AssemblyInfoInputs.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.AssemblyInfo.cs
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.csproj.CoreCompileInputs.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\refint\AxKeyEncryptor.dll
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.pdb
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\AxKeyEncryptor.genruntimeconfig.cache
E:\AX Copilot\src\AxKeyEncryptor\obj\Release\net8.0-windows\ref\AxKeyEncryptor.dll

View File

@@ -0,0 +1 @@
0f1c0010d6da416743f3fb1ce205ad8b1102ab51147f8c5a9374c003ac43fda9

View File

@@ -0,0 +1,5 @@
E:\AX Commander\dist\AxKeyEncryptor\AxKeyEncryptor.exe
E:\AX Commander\dist\AxKeyEncryptor\AxKeyEncryptor.dll
E:\AX Commander\dist\AxKeyEncryptor\AxKeyEncryptor.deps.json
E:\AX Commander\dist\AxKeyEncryptor\AxKeyEncryptor.runtimeconfig.json
E:\AX Commander\dist\AxKeyEncryptor\AxKeyEncryptor.pdb

View File

@@ -0,0 +1,5 @@
E:\AX Copilot\dist\AxKeyEncryptor\AxKeyEncryptor.exe
E:\AX Copilot\dist\AxKeyEncryptor\AxKeyEncryptor.dll
E:\AX Copilot\dist\AxKeyEncryptor\AxKeyEncryptor.deps.json
E:\AX Copilot\dist\AxKeyEncryptor\AxKeyEncryptor.runtimeconfig.json
E:\AX Copilot\dist\AxKeyEncryptor\AxKeyEncryptor.pdb

View File

@@ -0,0 +1,139 @@
{
"version": 3,
"targets": {
"net8.0-windows7.0": {
"System.Security.Cryptography.ProtectedData/8.0.0": {
"type": "package",
"compile": {
"lib/net8.0/System.Security.Cryptography.ProtectedData.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.Security.Cryptography.ProtectedData.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
}
}
},
"libraries": {
"System.Security.Cryptography.ProtectedData/8.0.0": {
"sha512": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==",
"type": "package",
"path": "system.security.cryptography.protecteddata/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"PACKAGE.md",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Security.Cryptography.ProtectedData.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net462/System.Security.Cryptography.ProtectedData.dll",
"lib/net462/System.Security.Cryptography.ProtectedData.xml",
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll",
"lib/net6.0/System.Security.Cryptography.ProtectedData.xml",
"lib/net7.0/System.Security.Cryptography.ProtectedData.dll",
"lib/net7.0/System.Security.Cryptography.ProtectedData.xml",
"lib/net8.0/System.Security.Cryptography.ProtectedData.dll",
"lib/net8.0/System.Security.Cryptography.ProtectedData.xml",
"lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll",
"lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"system.security.cryptography.protecteddata.8.0.0.nupkg.sha512",
"system.security.cryptography.protecteddata.nuspec",
"useSharedDesignerContext.txt"
]
}
},
"projectFileDependencyGroups": {
"net8.0-windows7.0": [
"System.Security.Cryptography.ProtectedData >= 8.0.0"
]
},
"packageFolders": {
"C:\\Users\\admin\\.nuget\\packages\\": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj",
"projectName": "AxKeyEncryptor",
"projectPath": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj",
"packagesPath": "C:\\Users\\admin\\.nuget\\packages\\",
"outputPath": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "10.0.200"
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"dependencies": {
"System.Security.Cryptography.ProtectedData": {
"target": "Package",
"version": "[8.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.201/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,10 @@
{
"version": 2,
"dgSpecHash": "19WZQRzCduk=",
"success": true,
"projectFilePath": "E:\\AX Copilot - Codex\\src\\AxKeyEncryptor\\AxKeyEncryptor.csproj",
"expectedPackageFiles": [
"C:\\Users\\admin\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512"
],
"logs": []
}