Tag: commoncrypto

CCCryptor的使用是否需要法国import报关证书?

想要从应用程序中实施encryption的人员获得一些帮助,并已将其传递到应用程序商店。 我们的应用程序使用CCCryptor提供的https/SSL和AES256encryption以及keychain 。 根据这个关于encryption的消息: 如果您打算在法国发布您的应用,则符合以下条件的应用必须符合法国encryption法规/法规。 此要求适用于使用,访问,实施或合并的应用程序:(a)尚未由诸如IEEE,IETF,ISO,ITU,ETSI,3GPP,TIA等国际标准组织进行标准化的任何encryptionalgorithm或未另行公布; 或(b)标准(如AES,DES,3DES,RSA)encryptionalgorithm代替或除了访问或使用iOS和/或Mac OS X中的encryption外,苹果将要求您上传您的当您将您的应用程序提交到App Store时获得法国的批准声明。 相关的法国encryption法规可在以下urlfind: http : //www.legifrance.gouv.fr/affichTexte.do? cidTexte = LEGITEXT000005789847 & dateTexte =# LEGIARTI000006421577 http://www.ssi.gouv.fr/archive/fr/reglementation/regl_crypto .html http://www.ssi.gouv.fr/site_article195.html http://www.ssi.gouv.fr/site_article197.html 我有疑问就行了: 除了访问或使用iOS中的encryption之外,还可以使用标准(例如,AES,DES,3DES,RSA)encryptionalgorithm 从我研究的, CCCryptor是一个由苹果公司开发的开源类,所以它应该已经是iOS中的encryption,但是根据这个相关的stackoverflowpost谁也使用CCCryptor ,有人回答被要求申请法国import声明。 那么对于已经通过这个问题的小伙子,我们是否需要申请法国的import申报?

支持GCM的AES 256不可能在iOS?

目前AES 256 is CBC支持的encryption模式AES 256 is CBC 。 但是我想使用GCM模式的AES 256 encryption和PKCS5Padding / PKCS7Padding 。 请让我知道如何做到这一点?

SecKeyRawVerify在mac上validation,但在iOS上失败-9809

我需要在Mac上对数据进行数字签名,然后在iOS上进行validation。 所以我生成RSA密钥对和DER格式的公开密钥的证书与开放ssl(尝试与SecKeyGeneratePair生成,但它很难导入公钥到iOS和SecKeyRawVerify仍然不能使用相同的结果),并签署我的数据Mac应用程序。 那么如果我在iOSvalidation这个数据validation失败,-9809错误代码,但如果在macvalidation执行相同的代码成功。 这是我的validation码: NSString* certPath = [[NSBundle mainBundle] pathForResource: @"Public" ofType:@"der"]; NSData* certificateData = [NSData dataWithContentsOfFile: certPath]; SecCertificateRef certificateFromFile = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData); // load the certificate SecPolicyRef secPolicy = SecPolicyCreateBasicX509(); SecTrustRef trust; OSStatus statusTrust = SecTrustCreateWithCertificates( certificateFromFile, secPolicy, &trust); SecTrustResultType resultType; OSStatus statusTrustEval = SecTrustEvaluate(trust, &resultType); SecKeyRef publicKey = SecTrustCopyPublicKey(trust); NSString* licensingPolicyString = […]

AES128在iOS 7上截断解密的文本,在iOS 8上没有问题

使用ECB模式(这是玩具encryption)和PKCS7填充使用AES128encryption的密文,以下代码块导致在iOS 8下恢复完整的明文。 在iOS 7下运行相同的代码块会导致正确的明文,但会被截断。 为什么是这样? #import "NSData+AESCrypt.h" // <– a category with the below function #import <CommonCrypto/CommonCryptor.h> – (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES128 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); if (iv) { [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; } NSUInteger dataLength = [self length]; size_t […]

任何人有问题的iOS 5encryption?

有一个(相当复杂)的应用程序,在iOS 4上正常工作,但在解密问题的iOS 5上失败。 它解密一个SQLite数据库页面,最后16个字节似乎没有被正确解密。 这是否与任何人打铃? 更新 我已经确定,当CCCryptorUpdate的缓冲区长度为1008(1024 – 16)时,它只解密992个字节(在dataOutMoved参数中报告)。 如果CCCryptorFinal返回剩余的字节,这将是确定的,但它报告零字节移动。 但是,CCCryptorFinal正在报告一个-4304的返回码(这是一个无用的kCCDecodeError)。 更新2 我已经把它作为一个彻头彻尾的bug。 我已经比较了byte-to-byteencryption和input解密的输出,并比较了这些密钥。 相同。 但是,如果缓冲区长度是1008,那么解密总是失败,甚至当解密器被给予更大的输出缓冲器时(它表示在这种情况下它需要1024)。 我认为它可以正常工作1024,但我还没有经过第一个奇怪的大小缓冲区告诉。 等等 那么,似乎没有什么解密。 这是使用“一体化”CCCrypt()接口,以消除CCCryptorCreate / Update / Final的sorting错误的机会。 我不知道这是AES128的问题吗? 奇怪的是,当数据库的第1页被encryption时,encryption总是报告比我告诉的更多的16个字节 – 如果我告诉1008它报告1024,如果我告诉它1024报告1040.没有其他页面这样做,我不知道CCCrypt如何知道它正在处理的页面。 就像我说的,好奇。 发现它(我认为) 旧的代码是指定kCCOptionPKCS7Padding ,据我所知,它应该只用于encryption缓冲区长度不是块长度的倍数(并提供额外的输出缓冲区空间)。 这导致几乎所有的解密操作都以-4304失败。 但是在iOS 4中,操作仍然会移动他们解密的数据(实际上是所有的数据),而iOS 5发生了变化,如果操作失败(最后一个块几乎总是失败),所有数据移动都被抑制。 closures填充选项使代码工作,不会发布任何错误。

iOS 4中有CC_MD5()和CC_SHA1()吗?

我期待在我的iOS应用程序中使用针对iOS 4及更高版本的MD5或SHA-1。 我使用CommonCrypto / CommonDigest.h中的CC_MD5()和CC_SHA1()函数。 它似乎在运行iOS 4.1和iPhone 4.0模拟器的iPhone上运行良好,但我担心,因为在XCode 4.2附带的iOS 5 SDK中声明如下函数: extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0); extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0); 这似乎表明,这些function仅适用于iOS 5及更高版本。 这些function是否允许在iOS 4应用程序中使用,如果有的话,是否有任何正式的参考来certificate这一事实?

aes 128消息解密 – Swift,iOS

我试图用下面的代码128密钥解密消息。 这是string的扩展: func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? { if let keyData = key.dataUsingEncoding(NSUTF8StringEncoding), data = NSData(base64EncodedString: self, options: .IgnoreUnknownCharacters), cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128) { let keyLength = size_t(kCCKeySizeAES128) let operation: CCOperation = UInt32(kCCDecrypt) let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128) let options: CCOptions = UInt32(options) var numBytesEncrypted :size_t = 0 let cryptStatus […]

如何在iOS上使用AES GCM进行encryption?

我需要在GCM模式下使用AESencryption来encryption/解密一些数据,但显然这不能用CommonCrypto API来完成。 这已经在这里被问过,但接受的答案不是我正在寻找,因为我需要使用这个特定的algorithm。 有任何想法吗? 我应该使用OpenSSL吗? 因为我听说在iOS中使用它有一些错误。 我在Swift中寻找答案,但是Objective-C也可以。

我如何在iOS中使用PKCS8 RSA DER私钥?

在运行时,我的iOS应用程序接收一个由公有私有RSA密钥对的文件,由其他人的Java生成: KeyPairGenerator keygenerator; keygenerator = KeyPairGenerator.getInstance("RSA"); keygenerator.initialize(4096); KeyPair keypair = keygenerator.generateKeyPair(); PrivateKey privateKey = keypair.getPrivate().getEncoded(); PublicKey publicKey = keypair.getPublic().getEncoded(); 我已经成功地读取和使用公钥,使用这种方法 ,从密钥剥去一些序言。 我现在想要使用私钥 。 同样的方法不起作用,我认为序言是不同的。 博客build议它导入PKCS#1 PEM密钥,但接着说它们是二进制的,所以我认为它们只是Base64编码的DER密钥。 我还发现,也许我所拥有的密钥是PKCS#8编码。 当然可以使用 openssl pkcs8 -nocrypt -inform der < pk8.der > pvt.pem 在示例私钥和openssl不抱怨。 公钥是PKCS#1还是私有PKCS#8? 但是我真的想要使用CommonCrypto和安全框架,而不是在OpenSSL上进行链接。 在Mac OS上有libsecurity中的函数来读取PKCS#8,但是这还没有到iOS。 老实说,我尝试阅读源代码,但是我无法弄清楚他们究竟是在什么地方剥下钥匙。 [TL; DR]如何从DER私钥中剥离版本和algorithm PKCS#8字段,并使用CommonCrypto或一些C / C ++ / ObjC获取普通密钥?

使用RSA在iOS上签名和validation

如何使用RSA密钥在iOS上签名和validation一些数据(最好使用系统自己的libcommonCrypto )?