wxgmnstMJ 2015-05-16 02:58 采纳率: 0%
浏览 1141

IOS RSA 加密 不用openssl可以么 这个案例可靠么 这个案例可靠么

这个案例我是从code4app下载的。大家请看

// RSA.h
//
// Copyright (c) 2012 scott ban
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import

typedef void (^GenerateSuccessBlock)(void);

@interface RSA : NSObject{
@private
NSData * publicTag;
NSData * privateTag;
NSOperationQueue * cryptoQueue;
GenerateSuccessBlock success;
}

@property (nonatomic,readonly) SecKeyRef publicKeyRef;
@property (nonatomic,readonly) SecKeyRef privateKeyRef;
@property (nonatomic,readonly) NSData *publicKeyBits;
@property (nonatomic,readonly) NSData *privateKeyBits;

  • (id)shareInstance;
  • (void)generateKeyPairRSACompleteBlock:(GenerateSuccessBlock)_success;

  • (NSData *)RSA_EncryptUsingPublicKeyWithData:(NSData *)data;

  • (NSData )RSA_EncryptUsingPrivateKeyWithData:(NSData)data;

  • (NSData *)RSA_DecryptUsingPublicKeyWithData:(NSData *)data;

  • (NSData )RSA_DecryptUsingPrivateKeyWithData:(NSData)data;

@end
// RSA.m
//
// Copyright (c) 2012 scott ban
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "RSA.h"

uint8_t *plainBuffer;
uint8_t *cipherBuffer;
uint8_t *decryptedBuffer;

const size_t BUFFER_SIZE = 32;
const size_t CIPHER_BUFFER_SIZE = 1024;
const uint32_t PADDING = kSecPaddingPKCS1;
const size_t kSecAttrKeySizeInBitsLength = 2024;

//static const UInt8 publicKeyIdentifier[] = "com.apple.sample.publickey222\0";
//static const UInt8 privateKeyIdentifier[] = "com.apple.sample.privatekey111\0";
/**

  • 公钥 */ static const UInt8 publicKeyIdentifier[] = "ba3a3302ed9e00d47775582ced852ac325dd8e79702baf754bd1b0a9e14857f0dee560f8f951b118f3331c661e6fd5ce7c9060a0e3bc2afefacf14dd81797610a074f86a5b725cba12daa8ada22d944d5a30b993a6145b4672f37e5c58e4ce563e79ed7bb485abb129df969ced30051537d5bd6ac70d1be3ddfa834100efc055"; static const UInt8 privateKeyIdentifier[] = "com.apple.sample.privatekey111\0";

#
[privateKeyAttr setObject:privateTag forKey:(__bridge id)kSecAttrApplicationTag];
// See SecKey.h to set other flag values.
cKey length];

NSMutableData *bits = [NSMutableData dataWithLength:keyBufferSize];
OSStatus sanityCheck = SecKeyDecrypt(key,
                                     kSecPaddingPKCS1,
                                     (const uint8_t *) [wrappedSymmetricKey bytes],
                                     cipherBufferSize,
                                     [bits mutableBytes],
                                     &keyBufferSize);
NSAssert(sanityCheck == noErr, @"Error decrypting, OSStatus == %ld.", sanityCheck);

[bits setLength:keyBufferSize];

return bits;

}

  • (NSData *) RSA_EncryptUsingPublicKeyWithData:(NSData *)data{
    return [self rsaEncryptWithData:data usingPublicKey:YES];
    }

  • (NSData ) RSA_EncryptUsingPrivateKeyWithData:(NSData)data{
    return [self rsaEncryptWithData:data usingPublicKey:NO];
    }

  • (NSData *) RSA_DecryptUsingPublicKeyWithData:(NSData *)data{
    return [self rsaDecryptWithData:data usingPublicKey:YES];
    }

  • (NSData ) RSA_DecryptUsingPrivateKeyWithData:(NSData)data{
    return [self rsaDecryptWithData:data usingPublicKey:NO];
    }

@end

IOS RSA 加密 这个案例我是从code4app下载的,但是里面不用openssl生成的.pem文件作为公钥,
而是直接用/** * 公钥 */ static const UInt8 publicKeyIdentifier[] = "ba3a3302ed9e00d47775582ced852ac325dd8e79702baf754bd1b0a9e14857f0dee560f8f951b118f3331c661e6fd5ce7c9060a0e3bc2afefacf14dd81797610a074f86a5b725cba12daa8ada22d944d5a30b993a6145b4672f37e5c58e4ce563e79ed7bb485abb129df969ced30051537d5bd6ac70d1be3ddfa834100efc055"; static const UInt8 privateKeyIdentifier[] = "com.apple.sample.privatekey111\0";为什么
这个用公钥么,我表示疑惑。。。这个案例可行么,,。。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 slam rangenet++配置
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制
    • ¥20 usb设备兼容性问题
    • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊