如何完全序列化/反序列化RSAParameters对象 [英] How to completely serialize/deserialize RSAParameters object

查看:81
本文介绍了如何完全序列化/反序列化RSAParameters对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

RSAParameters 对象不支持私钥数据的序列化.如何完全序列化和反序列化私钥?

The RSAParameters object does not support serialization of private key data. How can I serialize and deserialize a private key completely?

推荐答案

以下代码可用于使用您选择的序列化器对 RSAParameters 对象进行序列化和反序列化.

The following code may be used to serialize and deserialize RSAParameters objects, using the serializer of your own choosing.

using System;
using System.Runtime.Serialization;
using System.Security.Cryptography;

[Serializable]
public class RSAParametersSerializable : ISerializable
{
    private RSAParameters _rsaParameters;

    public RSAParameters RSAParameters
    {
        get
        {
            return _rsaParameters;
        }
    }

    public RSAParametersSerializable(RSAParameters rsaParameters)
    {
        _rsaParameters = rsaParameters;
    }

    private RSAParametersSerializable()
    {
    }

    public byte[] D { get { return _rsaParameters.D; } set { _rsaParameters.D = value; } }

    public byte[] DP { get { return _rsaParameters.DP; } set { _rsaParameters.DP = value; } }

    public byte[] DQ { get { return _rsaParameters.DQ; } set { _rsaParameters.DQ = value; } }

    public byte[] Exponent { get { return _rsaParameters.Exponent; } set { _rsaParameters.Exponent = value; } }

    public byte[] InverseQ { get { return _rsaParameters.InverseQ; } set { _rsaParameters.InverseQ = value; } }

    public byte[] Modulus { get { return _rsaParameters.Modulus; } set { _rsaParameters.Modulus = value; } }

    public byte[] P { get { return _rsaParameters.P; } set { _rsaParameters.P = value; } }

    public byte[] Q { get { return _rsaParameters.Q; } set { _rsaParameters.Q = value; } }

    public RSAParametersSerializable(SerializationInfo information, StreamingContext context)
    {
        _rsaParameters = new RSAParameters()
        {
            D = (byte[])information.GetValue("D", typeof(byte[])),
            DP = (byte[])information.GetValue("DP", typeof(byte[])),
            DQ = (byte[])information.GetValue("DQ", typeof(byte[])),
            Exponent = (byte[])information.GetValue("Exponent", typeof(byte[])),
            InverseQ = (byte[])information.GetValue("InverseQ", typeof(byte[])),
            Modulus = (byte[])information.GetValue("Modulus", typeof(byte[])),
            P = (byte[])information.GetValue("P", typeof(byte[])),
            Q = (byte[])information.GetValue("Q", typeof(byte[]))
        };
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("D", _rsaParameters.D);
        info.AddValue("DP", _rsaParameters.DP);
        info.AddValue("DQ", _rsaParameters.DQ);
        info.AddValue("Exponent", _rsaParameters.Exponent);
        info.AddValue("InverseQ", _rsaParameters.InverseQ);
        info.AddValue("Modulus", _rsaParameters.Modulus);
        info.AddValue("P", _rsaParameters.P);
        info.AddValue("Q", _rsaParameters.Q);
    }
}

这篇关于如何完全序列化/反序列化RSAParameters对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆