发表日期:2019-08 文章编辑:小灯 浏览次数:1122
之前项目中采取的加密方式,只是对于重要的参数进行AES加密,再将各个参数拼接而成,通过MD5签名后形成最后一个参数。目前,改用了RSA签名的方式进行加密。
主要针对于些重要的参数进行加密,如账号、密码等,具体代码实现可下Demo查看
- (NSData *)AES128EncryptedDataWithKey:( *)key iv:( *)iv
{
[ AES128Operation:kCCEncrypt key:key iv:iv];
}
- (NSData *)AES128DecryptedDataWithKey:( *)key iv:( *)iv
{
[ AES128Operation:kCCDecrypt key:key iv:iv];
}
- (NSData *)AES128Operation:(CCOperation)operation key:( *)key iv:( *)iv
{
keyPtr[kCCKeySizeAES128 + ];
bzero(keyPtr, (keyPtr));
[key getCString:keyPtr maxLength:(keyPtr) encoding:NSUTF8StringEncoding];
ivPtr[kCCBlockSizeAES128 + ];
bzero(ivPtr, (ivPtr));
(iv) {
[iv getCString:ivPtr maxLength:(ivPtr) encoding:NSUTF8StringEncoding];
}
NSUInteger dataLength = [ length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
*buffer = malloc(bufferSize);
size_t numBytesEncrypted = ;
CCCryptorStatus cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[ bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
(cryptStatus == kCCSuccess) {
[NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
;
}
+ (NSData *)DESEncrypt:(NSData *)data WithKey:( *)key
{
keyPtr[kCCKeySizeAES256+];
bzero(keyPtr, (keyPtr));
[key getCString:keyPtr maxLength:(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
voidvoid *buffer = malloc(bufferSize);
size_t numBytesEncrypted = ;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeDES,
,
[data bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
(cryptStatus == kCCSuccess) {
[NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
;
}
+ (NSData *)DESDecrypt:(NSData *)data WithKey:( *)key
{
keyPtr[kCCKeySizeAES256+];
bzero(keyPtr, (keyPtr));
[key getCString:keyPtr maxLength:(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
voidvoid *buffer = malloc(bufferSize);
size_t numBytesDecrypted = ;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeDES,
,
[data bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);
(cryptStatus == kCCSuccess) {
[NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
;
}
MD5加密一般用于数据准确性检测,加密结果不可逆,一般用于不需要解密的地方.
iOS SDK自带有MD5加密的框架CommonCrypto,使用时导入即可。
可以根据需要选择16位、32位、64位的。
+ ( *)md5HexDigest:(*)input
{
* str = [input UTF8String];
result[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, strlen(str), result);
*ret = [ stringWithCapacity:CC_MD5_DIGEST_LENGTH*];
( i = ; i<CC_MD5_DIGEST_LENGTH; i++) {
[ret appendFormat:@,result[i]];
}
ret;
}
加密主要是做加密操作,防止信息泄露。
加签主要是为了防恶意攻击,防止别人模拟我们的客户端对我们的服务器进行攻击,避免服务器瘫痪。
公钥、私钥可以使用字符串的形式,也可以用文件的形式。
RSA加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密。
RSA加签:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。
RSA加密只需要导入Security.framework框架即可使用 这篇文章有详细的代码可参考,Demo中也有,使用起来比较简单。
这里使用的密钥文件是.der和.p12格式,与java不同
签名和加密使用的是不同的方法,使用下面这个库可以实现RSA签名(这个库也可实现RSA加密解密的功能)
iOSRSAHandler
签名方式有两种:1.MD5+RSA 2.sha+RSA 本库中的sha加密使用的是sha1,我改成了sha256
主要用于隐藏明文,信息可以随意进行解密,iOS 也提供了Base64加密的api,使用非常简单。
凯撒加密是一种简单的文字替换加密。例如将字符串中的前几位进行替换。 考虑到加密内容不只是英文字母。此处改进使用ASCII码偏移进行加密解密。
iOS加密Demo
日期:2019-02 浏览次数:6407
日期:2019-02 浏览次数:4164
日期:2019-02 浏览次数:3908
日期:2019-02 浏览次数:4364
日期:2019-02 浏览次数:4094
日期:2019-02 浏览次数:7221
日期:2019-02 浏览次数:3951
日期:2019-02 浏览次数:4436
日期:2019-02 浏览次数:4285
日期:2019-02 浏览次数:3970
日期:2019-02 浏览次数:4307
日期:2019-02 浏览次数:4076
日期:2019-02 浏览次数:3976
日期:2019-02 浏览次数:3898
日期:2019-02 浏览次数:4643
日期:2019-02 浏览次数:4099
日期:2019-02 浏览次数:4089
日期:2019-02 浏览次数:4149
日期:2019-02 浏览次数:4108
日期:2019-02 浏览次数:4019
日期:2019-02 浏览次数:4384
日期:2019-09 浏览次数:4406
日期:2019-09 浏览次数:4059
日期:2019-09 浏览次数:4076
日期:2019-09 浏览次数:4028
日期:2019-09 浏览次数:4008
日期:2019-09 浏览次数:4102
日期:2019-09 浏览次数:4047
日期:2019-09 浏览次数:4519
日期:2019-09 浏览次数:5033
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.