c# - 在 C# 中实现 RSA

标签 c# rsa rsacryptoserviceprovider

我目前正在尝试使用 RSACrytoServiceProveider 类实现一个类来处理我的应用程序实例之间的安全通信。 第一个问题:实现一个类来处理发送者/接收者角色是个好主意还是我应该将角色分成单独的类?。这是我到目前为止所做的:

using System;
using System.Text;
using System.Security.Cryptography;

namespace Agnus.Cipher
{
    public class RSA
    {
        private byte[] plaintextBytes;
        private byte[] ciphertextBytes;
        private RSACryptoServiceProvider rSAProviderThis;
        private RSACryptoServiceProvider rSAProviderOther;

        public string PublicKey
        {
            get { return rSAProviderThis.ToXmlString(false); }
        }

        public RSA()
        {
            rSAProviderThis = new RSACryptoServiceProvider { PersistKeyInCsp = true }; 
            plaintextBytes = Encoding.Unicode.GetBytes(PublicKey);
        }

        public void InitializeRSAProviderOther(string parameters)
        {
            rSAProviderOther.FromXmlString(parameters);
        }

        public byte[] Encrypt()
        {
            return rSAProviderThis.Encrypt(plaintextBytes, true);
        }
        public byte[] Decrypt()
        {
            return rSAProviderThis.Decrypt(ciphertextBytes, true);
        }
        public byte[] Sign()
        {
            using (SHA1Managed SHA1 = new SHA1Managed())
            {
                byte[] hash = SHA1.ComputeHash(ciphertextBytes);
                byte[] signature = rSAProviderThis.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
                return signature;
            }
        }
        public void Verify()
        {
            throw new NotImplementedException();
        }

    }
}

第二个问题:我如何发送和接收要馈送到类的数据?我是这个领域的新手,不胜感激。

最佳答案

我会让加密/签名/解密/验证方法采用数据参数,而不是为它们使用成员变量。拥有 key 和提供者的成员变量似乎没问题。基本上我希望多次使用相同的 key 而不是相同的数据。

我还会使其不可变 - 将所有变量设为只读,在构造函数中获取提供者所需的所有参数,而不是使用单独的初始化方法。

除此之外,将功能包装在更简单的 API 中以满足您的需求似乎没问题,是的。

关于c# - 在 C# 中实现 RSA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384401/

相关文章:

java - 如何加载文件 privakey 文件类型是pem

c# - 比较 Linq to Sql 中的可空类型

c# - 应用栏窗口从停靠位置弹出,然后移动到停靠位置

git - 将 rsa key 添加到系统

c - 没有填充的OpenSSL RSA加密无法正确加密

c# - C# 中的 RSA 不会为特定 key 生成相同的加密字符串?

c# - 对象已存在于 RSACryptoServiceProvider 中

c# - 如何正确锁定值类型?

c# - 断言 xunit 中存在文件的惯用方法是什么?

go - 在 RSA 加密中为每次生成不同的 IV