/// <inheritdoc/>
        public ICryptographicKey ImportKeyPair(byte[] keyBlob, CryptographicPrivateKeyBlobType blobType = CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo)
        {
            Requires.NotNull(keyBlob, nameof(keyBlob));

            RSAParameters parameters = KeyFormatter.GetFormatter(blobType)
                                       .Read(keyBlob)
                                       .ComputeFullPrivateKeyData();

            IPrivateKey?      privateKey = null;
            IPublicKey?       publicKey = null;
            BigInteger?       modulus = null, d = null, publicExponent = null;
            RSAPrivateKeySpec?privateKeySpec = null;
            RSAPublicKeySpec? publicKeySpec  = null;

            try
            {
#pragma warning disable CA2000 // Dispose objects before losing scope
                modulus        = new BigInteger(1, parameters.Modulus);
                d              = new BigInteger(1, parameters.D);
                privateKeySpec = new RSAPrivateKeySpec(modulus, d);
                var factory = KeyFactory.GetInstance("RSA");
                if (factory is null)
                {
                    throw new InvalidOperationException(Strings.UnsupportedAlgorithm);
                }

                privateKey = factory.GeneratePrivate(privateKeySpec) !;
                var privateRsaKey = privateKey.JavaCast <IRSAPrivateKey>() !;

                publicExponent = new BigInteger(1, parameters.Exponent);
                publicKeySpec  = new RSAPublicKeySpec(privateRsaKey.Modulus, publicExponent);
                publicKey      = factory.GeneratePublic(publicKeySpec) !;

                return(new RsaCryptographicKey(publicKey, privateKey, parameters, this.algorithm));

#pragma warning restore CA2000 // Dispose objects before losing scope
            }
            catch
            {
                publicExponent?.Dispose();
                publicKeySpec?.Dispose();
                privateKeySpec?.Dispose();
                modulus?.Dispose();
                d?.Dispose();
                privateKey?.Dispose();
                publicKey?.Dispose();
                throw;
            }
        }
        /// <inheritdoc/>
        public ICryptographicKey ImportKeyPair(byte[] keyBlob, CryptographicPrivateKeyBlobType blobType = CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo)
        {
            Requires.NotNull(keyBlob, "keyBlob");

            RSAParameters parameters = KeyFormatter.GetFormatter(blobType).Read(keyBlob);
            IPrivateKey   privateKey;
            IPublicKey    publicKey;

            var spec    = new RSAPrivateKeySpec(new BigInteger(1, parameters.Modulus), new BigInteger(1, parameters.D));
            var factory = KeyFactory.GetInstance("RSA");

            privateKey = factory.GeneratePrivate(spec);

            var privateRsaKey = privateKey.JavaCast <IRSAPrivateKey>();
            var publicKeySpec = new RSAPublicKeySpec(privateRsaKey.Modulus, new BigInteger(1, parameters.Exponent));

            publicKey = factory.GeneratePublic(publicKeySpec);

            return(new RsaCryptographicKey(publicKey, privateKey, parameters, this.algorithm));
        }
Пример #3
0
        public static RSAKey NetToJava(RSAKey rsakey)
        {

            //公钥  
            byte[] m = Base64.decodeBase64("mX/9zl8rflH5pLaP5P1Qd/9wXwNBSx7OpLlYDnGr7wD0njiDfPSUkgf9oF5NcvZwl24qdJ1SLmrgUtnr+yeXBNZNKaan1xXKISHdlHvbW5G8nJCJW6CuaHMkVw3Y7kwaIIlUdv09vxfjj0AoabttjbtF1kqETzbQ6fK3EN6sY5U=");
            byte[] e = Base64.decodeBase64("AQAB");
            BigInteger b1 = new BigInteger(1, m);
            BigInteger b2 = new BigInteger(1, e);
            //私钥  
            byte[] m1 = Base64.decodeBase64("3RgqP5YOYUXft8YOlDphyaCoof27MSfTD2eVCFVXB5hatrls1fSUcmUuWuGV970sS6KQZZtyWHQ5970sCzKFlq82He8Uoe0JM3axBvd6PbSGjulUJr62qNW5hgkIEfxSRYl8AQsbbusFtks4obfepsfE02cLmmZepnZAdIOWifE=");
            byte[] e1 = Base64.decodeBase64("QcSZdLbHakolxX4GAjPnuNmwsBdRIsss7o0qeQMh02GPwoEgDfkmW20bv+8Q9FPypEEkYQU/m25ffAFq453QvLegYYi8OvWN+dvgchQRdeb22d+s6xYGGN9DRcPFRE48INde8FBHf/lzVgToV75h1H7g+jB4hLmLeuIuHsB43/0=");
            BigInteger b11 = new BigInteger(1, m1);
            BigInteger b21 = new BigInteger(1, e1);
            //公钥  
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1, b2);
            RSAPublicKey pubKey = (RSAPublicKey)keyFactory.generatePublic(keySpec);
            //私钥  
            RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(b11, b21);
            RSAPrivateKey priKey = (RSAPrivateKey)keyFactory.generatePrivate(priKeySpec);

        }