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

相关推荐
我不是懒洋洋16 天前
【C++】string(string的成员变量、auto和范围for、string常用接口的说明、OJ题目、string的模拟实现)
c语言·开发语言·c++·visual studio
C++ 老炮儿的技术栈17 天前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
A.零点17 天前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio
彷徨而立17 天前
【VS2026】介绍 Visual Studio 几个重要配置项
visual studio
AndyHuang197617 天前
【避坑指南】Visual Studio 插件报错 “Windows Terminal (wt.exe) was not found in PATH“ 完美解决
ide·windows·visual studio
彷徨而立17 天前
【Visual Studio】msbuild 使用举例
ide·visual studio
blueman888818 天前
VS2022 切换定义(F12 / Go to Definition)反应慢
c++·visual studio
周杰伦fans18 天前
记一次 Visual Studio 突然报错“未能加载 Microsoft.Internal.VisualStudio.Interop”的奇葩经历
microsoft·log4j·visual studio
x1387028595719 天前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
robot_???20 天前
Visual studio2022:找不到指定的SDK“Microsoft.NET.Sdk”
microsoft·.net·visual studio