VSIX 加密存取数据的案例

本篇为大家介绍一个加密存储数据到 OptionPane 的案例。

案例背景

AI 应用开发需要调用大模型开放的接口,API Key 便是必不可少的(以下使用 deepseek-v3 示范)。

关于如何获取且调用 deepseek 的 api key,可以访问官方文档 首次调用 Deepseek API Docs,这里不再赘述。

在集成 AI 到 VSIX 扩展应用过程中,如何存储且获取 API Key 是首先要考虑的,关键的需求如下:

  • API Key 不可明文存储;
  • API Key 不可明文展示;
  • 需要是一个全局变量,不可直接在源代码中声明使用;
  • 用户可以随时编辑。

案例解析

首先要解决的是:不可直接存储明文,这就需要在存储 API keyOptionPane 之前对用户输入的数据进行加密。

csharp 复制代码
public static string EncrySecureString(SecureString secureString)
{
	byte[] encryptedData = ProtectedData.Protect(
		Encoding.UTF8.GetBytes(ToInsecureString(secureString)),
		optionEntropy: null,
		scope: DataProtectionScope.CurrentUser
	);
}

而在调用 API 时则需要先获取存储在全局的加密数据,然后解密利用解密后的数据向 deepseek 大模型发送请求。

csharp 复制代码
public static SecureString DecryptToSecureString(string encryptedBase64)
{
	byte[] encryptedBytes = Covert.FromBase64String(encryptedBase64);
	byte[] decryptedBytes = ProtectedData.Unprotect(
		encryptedBytes,
		optionEntropy: null,
		scope: DataProtectionScope.CurrentUser
	);
	return ToSecureString(Encoding.UTF8.GetString(decryptedBytes));
}

其次不可直接将存储在全局的数据直接展示给用户,应当类似 Password 的风格,如下图: VSIX 提供了 OptionPane 接口用于存储全局的数据,用户可导航至 Tools >Option 找到 Visual Studio IDE 的所有全局配置标签页,如下图:

最后需要注意明文不可在代码内存中保留太长时间,这意味着在用户输入 API key 时,不可以直接使用 WPF.textbox 以普通字符串的形式接收用户输入的值,可以使用 SecureString 接收用户的输入值。 在 C# 中,SecureString 是一种用于安全存储敏感数据(如密码、密钥等)的特殊字符串类型。其核心设计目标是通过加密和内存管理机制,降低敏感数据在内存中暴露的风险。 而在请求发出后/时,应当立刻清理内存中的明敏感数据。这需要使用 byte[] 存储解密后的数据(在 C# 中普通字符串无法被安全地擦除)。最大的减少作用域,并且利用 Array.Clear() 清理 byte[] 数据。

相关推荐
JosieBook12 小时前
【软件安装】在 Visual Studio 2022 中安装 RDLC 报表插件的详细教程
ide·visual studio
m5655bj1 天前
通过 C# 在 Word 文档中添加文字或图片水印
c#·word·visual studio
.NET修仙日记2 天前
Visual Studio 演进之路:从集成套件到AI驱动的开发平台
ide·编辑器·ai编程·visual studio·1024程序员节
獨枭2 天前
Visual Studio 编译带显卡加速的 OpenCV
ide·opencv·visual studio
承渊政道2 天前
算法复杂度
c语言·数据结构·c++·算法·visual studio
Yupureki2 天前
从零开始的C++学习生活 16:C++11新特性全解析
c语言·数据结构·c++·学习·visual studio
歪歪1002 天前
C#如何在数据可视化工具中进行数据筛选?
开发语言·前端·信息可视化·前端框架·c#·visual studio
张人玉3 天前
Visual Studio 2022打包生成exe安装程序
ide·visual studio·打包·installer
sky-stars3 天前
Visual Studio 2022 安装使用:Entity Framework Core
asp.net·.netcore·visual studio