美文网首页
非对称加解密算法之DSA-iOS中的应用

非对称加解密算法之DSA-iOS中的应用

作者: ksnowlv | 来源:发表于2018-05-11 15:04 被阅读138次

1.引用openssl库。https://github.com/x2on/OpenSSL-for-iPhone

2.对数据进行签名。


/*对数据进行签名
 @param data 要签名的数据
 @return 签名后数据
 */
- (NSData *)sign:(NSData *)data {
    
    int dsaSize = DSA_size(_privateDSAKey);
    
    unsigned char *signBuf = (unsigned char *)calloc(dsaSize, 1);
    memset(signBuf, 0, dsaSize *sizeof(unsigned char));
    unsigned int signBufLength = 0;
    
    int res = DSA_sign(0, (const unsigned char *) data.bytes, (int)data.length, signBuf, &signBufLength, _privateDSAKey);
    
    if ( 1 == res ) {
        return [NSData dataWithBytesNoCopy:signBuf length:signBufLength];
    }
    
    free(signBuf);
    return nil;
}

3.对数据进行验签。


/*进行数据的DSA验签
 @param data      原数据
 @param signData 签名后的数据
 @return 是否成功
 */
 
- (BOOL)verify:(NSData *)data withSignData:(NSData *)signData {
    return  DSA_verify(0, (const unsigned char *)[data bytes], (int)data.length,  (const unsigned char *)[signData bytes], (int)signData.length, _publicDSAKey) == 1;
}

4.在加签和验签前加载公钥与私钥。


/*使用dsa公钥与私钥
 @param privateKey 私钥
 @param publicKey 公钥
 */
- (void)setUpPrivateKey:(NSString *)privateKey withPublicKey:(NSString *)publicKey {
    
    BIO *bio = BIO_new_mem_buf((void *)[privateKey cStringUsingEncoding:NSUTF8StringEncoding], -1);
    _privateDSAKey = PEM_read_bio_DSAPrivateKey(bio, NULL, NULL, NULL);
    
    BIO_free(bio);
    
    bio = BIO_new_mem_buf((void *)[publicKey cStringUsingEncoding:NSUTF8StringEncoding], -1);
    _publicDSAKey = PEM_read_bio_DSA_PUBKEY(bio, NULL, NULL, NULL);
    BIO_free(bio);
}

5.测试。

 KDSASign *sign = [KDSASign new];
    [sign setUpPrivateKey:priKey withPublicKey:pubKey];
    
    NSData *resData =  [sign sign:[orginalString dataUsingEncoding:NSUTF8StringEncoding]];
    BOOL isVerify =  [sign verify:[orginalString dataUsingEncoding:NSUTF8StringEncoding] withSignData:resData];
    
    if (isVerify) {
        NSLog(@"验签通过");
    }else{
        NSLog(@"验签失败");
    }

6.其它

  • 1.接口为什么设计成这样?加载公钥与私钥和加签,验签接口合并?
  • 2.为什么没有采用单例?
  • 3.为什么接口没有使用类方法?

相关文章

  • 非对称加解密算法之DSA-iOS中的应用

    1.引用openssl库。https://github.com/x2on/OpenSSL-for-iPhone 2...

  • 常用密码算法

    概论 在平时的开发过程中,我们基本上会使用到对称加解密算法,非对称加解密算法以及摘要算法。虽然有很多轮子可供开发者...

  • 区块链之加解密算法

    常用的加解密算法  常用的加解密算法有三类:对称加密算法、非对称加密算法以及hash加密算法。 在比特币中用到了非...

  • 1. 常用的加密算法

    常用的加解密算法分三大类:非对称密钥加密算法、对称密钥加密算法、Hash加密算法 非对称密钥加密算法常见算法:RS...

  • 非对称加密之 - RSA

    一、什么是非对称加密算法? 非对称主要是相对于对称加密算法而言的。对称加密算法加解密使用同一个秘钥;非对称算法则有...

  • 数字签名及证书

    1. 加密: 对称加密:用对称密钥及算法进行加密。对称密钥,加解密使用相同的密钥。 非对称加密:用非对称密钥及算法...

  • 数字证书——权威机构对私钥持有者身份的认可

    在现代密码学中,非对称密码算法应用十分常见,银行卡、U盾以及网络通信中应用的https,都应用了非对称密码算法技术...

  • 关于苹果证书加密那些事儿

    RSA是一种非对称算法,就是公钥和私钥配对进行加解密的方式,苹果的证书就是用的这种加解密算法,只要搞清楚公钥和私钥...

  • iOS中3DES加密解密

    加密 加密分为对称加密和非对称加密。 对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之...

  • RSA非对称加解密原理及示例代码

    RSA非对称加解密可以实现安全传输,本文简单介绍一下其原理和实现代码 RSA加密算法 RSA加密算法是一种非对称加...

网友评论

      本文标题:非对称加解密算法之DSA-iOS中的应用

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