当前位置: 首页 > 知识库问答 >
问题:

用iOS和C#实现RSA

贲绪
2023-03-14

我们需要从RSA密钥中获取模和指数。我使用以下方法创建了我的pubilc密钥。请让我知道我们如何从中提取模数和指数部分。我已经读过这篇文章了。

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

//现在我想从这个公钥中得到模和指数

编辑:-我也已经发送Base64字符串到服务器,但在那里,我们面临着一个相当大的问题,找到公钥ref从Base64字符串

C#代码段

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

现在我们需要无法解析的公钥组件。任何帮助都很好

共有1个答案

慕逸仙
2023-03-14

在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);
 类似资料:
  • 我正在尝试使用CryptoJS在JavaScript中进行加密,在C#中进行解密。花了很多时间试图让两种技术返回相同的输出。但是,输出是不同的--CryptoJS产生的加密字符串不同于C#产生的加密字符串。我做错了什么?谢谢你的帮助。

  • 情境:我有一个实现了JNI的dll,我想从一个Cpp应用程序调用其中的方法。 当前状态:根据我的理解,一个实现了JNI的dll实际上与JAVA无关,例如:在test.JAVA中,我编写了 并在testdll.cp 我认为这样的程序与JVM无关,jint结构似乎已经在JNI.h中完全定义了。 因此,我想知道是否可以直接调用而不从Cpp应用程序创建VM,如果可以,请: 参数列表中的`jnienv*`和

  • 本文向大家介绍C#实现较为实用的SQLhelper,包括了C#实现较为实用的SQLhelper的使用技巧和注意事项,需要的朋友参考一下 第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新第一次写代码,而sqlhelper则是初次接触数据库(不知道这种

  • 我正在使用owin pipeline为SAML身份验证(使用sustainsys saml库)实现SP启动的登录。我在配置的acs url上接收saml响应时遇到问题。从IDP收到saml响应,用户成功登录,但是当我试图在ACS urlendpoint读取saml响应时,该方法在调试流中从未被命中。 我相信ACSendpoint是saml响应将从idp(idp-browser和browser-ac

  • 本文向大家介绍C++调用C#的DLL实现方法,包括了C++调用C#的DLL实现方法的使用技巧和注意事项,需要的朋友参考一下 SwfDotNet是C#编写的,这是个特别好的读写Swf文件的库。本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件。 具体的实现步骤如下: 一、创建C# DLL,需要指定应用类型为“类库”,代码: 二、C++客户程序,是个控制台应用,代码: 三、这里有几点

  • 本文向大家介绍iOS中使用Fastlane实现自动化打包和发布,包括了iOS中使用Fastlane实现自动化打包和发布的使用技巧和注意事项,需要的朋友参考一下 简介 Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大量的时间。 Github:https://github.com/fastlane/fastlane 官网:https:/