You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在两台计算机间迁移RSA密钥?附密钥生成代码

如何把RSA密钥完整迁移到另一台计算机?

首先得明确:你现在在A机上用密钥容器生成的密钥,默认可能是不可导出私钥的——这是关键问题,因为要完整迁移密钥对,必须拿到包含私钥的完整密钥数据。下面一步步来操作:

第一步:在计算机A上确保密钥可导出并导出完整密钥

如果之前的密钥是没设置导出权限创建的,你得先调整一下,让密钥能被导出:

  1. (可选)如果旧的密钥容器存在且不可导出,先删除它:

    CspParameters cp = new CspParameters();
    cp.KeyContainerName = containerName; // 你原来的容器名
    cp.Flags = CspProviderFlags.DeleteKeyContainer;
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
    

    执行这段代码后,旧的密钥容器就被删掉了。

  2. 创建可导出的密钥容器并导出完整密钥:

    CspParameters cp = new CspParameters();
    cp.KeyContainerName = containerName;
    cp.Flags = CspProviderFlags.Exportable; // 核心:允许导出私钥
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
    // 导出包含公钥+私钥的完整XML字符串
    string fullKeyXml = rsa.ToXmlString(true);
    

    👉 划重点:这个fullKeyXml包含私钥,一定要通过安全渠道传输到B机(比如加密后发送,或者用U盘物理拷贝),绝对不能明文泄露!

第二步:在计算机B上导入密钥

有两种方式,看你的需求:

方式一:导入到B机的密钥容器(推荐,后续可重复使用)

这样之后你在B机上用相同的容器名创建RSACryptoServiceProvider时,就能直接拿到密钥,和A机的用法完全一致:

CspParameters cp = new CspParameters();
cp.KeyContainerName = containerName; // 和A机一样的容器名
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// 导入完整密钥XML
rsa.FromXmlString(fullKeyXml);

执行完这段代码,密钥就被永久保存到B机的密钥容器里了,之后再运行你原来的代码(只指定容器名),就能生成和A机一样的密钥对。

方式二:临时使用,不保存到容器

如果只是临时用一次,不想把密钥存在B机上,可以直接导入后使用:

RSACryptoServiceProvider rsaTemp = new RSACryptoServiceProvider();
rsaTemp.FromXmlString(fullKeyXml);
// 用rsaTemp做加密/解密操作,程序退出后密钥就消失了

注意事项

  • 安全性优先:私钥是加密体系的核心,传输和存储都要加密,别给任何无关人员接触的机会。
  • 保持CSP一致:两台机器要使用相同的加密服务提供商(默认的Microsoft RSA SChannel Cryptographic Provider在Windows上都是通用的,不用额外设置),如果A机自定义了ProviderName,B机也要对应设置。

内容的提问来源于stack exchange,提问作者BrianK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:07