RSA签名认证

作者: AKyS佐毅 | 来源:发表于2016-04-21 21:38 被阅读1574次
    网络安全.png

    RSA可汗学院第一章 RSA加密

    RSA加密原理第一章

    RSA加密原理第二章

    RSA: 
    1. 加签:用私钥加签,对方用公钥验签(防抵赖,私钥只有自己有!) 
    2. 加密:用对方公钥加密,对方用对应私钥解密(加密) 
    
     RSA使用“密钥对”对数据进行加密解密,在加密解密前需要先生存公钥(Public Key)和私钥(Private Key)。
     公钥(Public key): 用于加密数据. 用于公开, 一般存放在数据提供方, 例如iOS客户端。
     私钥(Private key): 用于解密数据. 必须保密, 私钥泄露会造成安全问题。
    

    如何生成RSA公钥私钥

    RSA证书.png

    生成类似支付宝的1024位私钥

      openssl genrsa -out private_key.em 1024
    

    生成certification require file

     openssl req -new -key private_key.pem -out rsaCertReq.csr
    

    CSR文件必须有CA的签名才可形成证书 并指定过期时间

    openssl x509 -req -days 365 -in rsaCertReq.csr -signkey private_key.pem -out     rsaCert.crt
    

    生成公钥供iOS使用

    openssl x509 -outform der -in rsaCert.crt -out public_key.der
    

    生成pkcs12文件,但不包含CA证书.生成私钥供iOS使用

    openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
    

    生成pem结尾的公钥供Java使用

    openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout
    

    生成pem结尾的私钥供Java使用

    openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
    

    RSA签名

    - (void)RSA{
    _rsa = [XYRSACryption new];
    // 加载公钥
    NSString *derPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"public_key" ofType:@"der"];
    [_rsa loadPublicKeyFromFile:derPath];
    
    // 加载私钥
    NSString *p12Path = [[NSBundle bundleForClass:[self class]] pathForResource:@"private_key" ofType:@"p12"];
    [_rsa loadPrivateKeyFromFile:p12Path password:privateKey];
    
    NSString *enStr = @"哈哈哈哈哈哈哈哈哈哈哈哈哈!";
    
    // 加密后的数据
    NSData *enData = [_rsa rsaEncryptData:
                      [enStr dataUsingEncoding:NSUTF8StringEncoding]];
    
    // 解密后的数据
    NSData *deData = [_rsa rsaDecryptData:enData];
    NSString *deStr = [[NSString alloc] initWithData:deData encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@,%@",enStr, deStr);
    
    // 签名
    NSData *signedData = [_rsa sha256WithRSA:enData];
    
    // 对前面进行验证
    BOOL result = [_rsa rsaSHA256VertifyingData:enData withSignature:signedData];
    if (result) {
          NSLog(@"验签成功");
    }else{
       NSLog(@"验签失败");
    }
    }

    相关文章

      网友评论

      本文标题:RSA签名认证

      本文链接:https://www.haomeiwen.com/subject/zzgtrttx.html