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

相关推荐
晨非辰31 分钟前
#C语言——刷题攻略:牛客编程入门训练(四):运算(二)
c语言·开发语言·经验分享·学习·visual studio
晨非辰10 小时前
#C语言——刷题攻略:牛客编程入门训练(一):简单输出、基本类型
c语言·学习·学习方法·visual studio
晨非辰17 小时前
#C语言——刷题攻略:牛客编程入门训练(四):运算
c语言·开发语言·学习·学习方法·visual studio
晨非辰4 天前
#C语言——学习攻略:深挖指针路线(五)--回调函数,qsort函数,qsort函数的模拟实现
c语言·开发语言·经验分享·学习·visual studio
晨非辰5 天前
#C语言——学习攻略:深挖指针路线(四续)——函数指针数组--转移表
c语言·开发语言·经验分享·学习·visual studio
前端赵哈哈5 天前
项目中的Vue I18n 9.x可以与VSCode插件i18n Ally配合使用
前端·vue.js·visual studio
徐归阳6 天前
第十一天:不定方程求解
c++·visual studio
写写闲篇儿6 天前
Visual Studio的妙用
ide·visual studio
楼田莉子6 天前
C++学习之继承
开发语言·c++·学习·visual studio
晨非辰6 天前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio