【问题标题】:How to completely serialize/deserialize RSAParameters object如何完全序列化/反序列化 RSAParameters 对象
【发布时间】:2015-02-18 00:15:14
【问题描述】:

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

【问题讨论】:

    标签: .net security serialization


    【解决方案1】:

    以下代码可用于序列化和反序列化RSAParameters 对象,使用您自己选择的序列化程序。

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2011-02-27
      • 2015-06-28
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多