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

相关推荐
心平气和量大福大1 天前
C#-WPF-布局-Grid
c#·wpf·visual studio
xiaowang1234shs1 天前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
云泽8081 天前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
C++ 老炮儿的技术栈1 天前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘
可视化运维管理爱好者2 天前
nVisual Studio:数据中心网络智能规划设计工具
网络·ide·visual studio
o5278831843 天前
校园一体化管理系统2.1、基于整洁四层架构 + DDD+CQRS 项目目录解读
后端·架构·c#·asp.net·visual studio
DevangLic4 天前
【powershell在哪里?如何禁止visual studio 更新.】
ide·visual studio
彷徨而立6 天前
【VS2017】 一个使用 cl 和 link 命令例子
visual studio
fuquxiaoguang7 天前
从“代码补全”到“架构合规”:VS2026企业定制AI智能体如何重塑研发质量体系
人工智能·visual studio·研发质量
阿米亚波7 天前
【C++ STL】std::forward_list
开发语言·c++·笔记·stl·visual studio·forward_list