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[] 数据。

相关推荐
永远是我的最爱13 小时前
基于.NET的小小便利店前台收银系统
前端·sqlserver·.net·visual studio
JQLvopkk3 天前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
踏过山河,踏过海3 天前
【qt-查看对应的依赖的一种方法】
qt·visual studio
承渊政道3 天前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio
dzj20214 天前
Visual Studio2022中好用的AI编码工具介绍——Windsurf(Codeium)
ide·ai·visual studio·code
JQLvopkk4 天前
C# 实践AI 编码:Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
zho_uzhou4 天前
c++ imgui implot绘图使用示例 visual studio
开发语言·c++·visual studio
是店小二呀5 天前
Visual Studio C++ 工程架构深度解析:从 .vcxproj 到 Qt MOC 的文件管理实录
c++·qt·visual studio
MyBFuture5 天前
编程实战:相机连接与参数设置指南
windows·c#·visual studio·vision pro·联合编程
zzh_my5 天前
Visual Studio 2022介绍
ide·visual studio