RSA реализовать с iOS и C # - PullRequest
0 голосов
/ 06 декабря 2018

Нам нужно взять модуль и показатель степени из ключей RSA.Я создал свой ключ публикации, используя следующую методологию.Пожалуйста, дайте мне знать, как мы можем извлечь из него модуль и экспоненту.Я уже прочитал эту запись .

 NSData* tag = [@"com.x.x.x" dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* attributes =
    @{ (id)kSecAttrKeyType:               (id)kSecAttrKeyTypeRSA,
       (id)kSecAttrKeySizeInBits:         @1024,
       (id)kSecPrivateKeyAttrs:
           @{ (id)kSecAttrIsPermanent:    @YES,
              (id)kSecAttrApplicationTag: tag,
              },
       };

    CFErrorRef error = NULL;
    SecKeyRef privateKey = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes,
                                                 &error);
    if (!privateKey) {
        NSError *err = CFBridgingRelease(error); 
        // Handle the error. . .
    }

    SecKeyRef publicKey = SecKeyCopyPublicKey(privateKey);

// Теперь я хочу, чтобы модуль и экспонента формировали этот publicKey

EDITED : - У меня естьТакже отправьте строку base64 на сервер, но там мы сталкиваемся с проблемой поиска открытого ключа ref из строки base64.если кто-то сделал это в c #, вы также можете помочь нам с этим

фрагментом кода c #

const string pKey = "-----key-----" 
byte[] publicKeyBytes = Convert.FromBase64String(pKey);            
var stream = new MemoryStream(publicKeyBytes);
Asn1Object asn1Object = Asn1Object.FromStream(stream);

Теперь нам нужен компонент с открытым ключом, который мы не можем проанализировать.Любая помощь будет отличной

1 Ответ

0 голосов
/ 06 декабря 2018

На C # вы можете добиться шифрования, используя этот способ,

        const string publicKey = "MIGJAoGBAMIt95f4xaP7vYV/+Hdyb4DK0oKvw495PrRYG3nsYgVP7zlBE/rTN6Nmt69W9d0nGefuRlJFIr9TA8vlJmqTus6uXEasBuEjzH7vM7HQeAK6i8qEbVy0T+Uuq+16yy059NL7i/VWljVE6rqTntDUELmbIwNBwj6oBuL1z3SnFoMjAgMBAAE="; //generated on iOS
        byte[] publicKeyBytes = Convert.FromBase64String(pKey);

        var stream = new MemoryStream(publicKeyBytes);
        Asn1Object asn1Object = Asn1Object.FromStream(stream);
        Asn1Encodable asn1Sequence = asn1Object;   

        AlgorithmIdentifier algorithmIdentifier = new 
        AlgorithmIdentifier(PkcsObjectIdentifiers.IdRsaesOaep);  

        SubjectPublicKeyInfo subjectPublicKeyInfo = new 
        SubjectPublicKeyInfo(algorithmIdentifier, asn1Sequence);   

        AsymmetricKeyParameter asymmetricKeyParameter2 = 
        PublicKeyFactory.CreateKey(subjectPublicKeyInfo);    

        RsaKeyParameters rsaKeyParameters = 
        (RsaKeyParameters)asymmetricKeyParameter2;
        RSAParameters rsaParameters = new RSAParameters();
        rsaParameters.Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned();
        rsaParameters.Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned();

        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(rsaParameters);
        string test = "John snow is the true king";
        byte[] encbyte = rsa.Encrypt(Encoding.UTF8.GetBytes(test), RSAEncryptionPadding.Pkcs1);
        string encrt = Convert.ToBase64String(encbyte);
...