弱加密算法有哪几种_常见的几种加密方法

本文介绍了几种常见的弱加密算法,包括MD5、SHA1、RSA、AES和DES。MD5具有不可逆性、抗修改性和抗碰撞性等特点,但存在弱抗碰撞问题。SHA1是哈希算法之一,RSA是非对称加密,适合公钥和私钥的使用。AES和DES是对称加密算法,其中AES更为安全。对于提高安全性,通常会使用加盐方式增强MD5和SHA1的加密效果。
摘要由CSDN通过智能技术生成

常见的几种加密方法和实

常见的几种加密方法 :

MD5

SHA1

RSA

AES

DES

1、MD5加密 是HASH算法一种、 是生成32位的数字字母混合码。 MD5主要特点是 不可逆

MD5算法还具有以下性质:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

具体代码

//输出小写

- (NSString *)lowerMD5:(NSString *)inPutText

{

//传入参数,转化成char

const char *cStr = [inPutText UTF8String];

//开辟一个16字节的空间

unsigned char result[CC_MD5_DIGEST_LENGTH];

/*

extern unsigned char * CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法

把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了md这个空间中

*/

CC_MD5(cStr, (CC_LONG)strlen(cStr), result);

return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

result[0], result[1], result[2], result[3],

result[4], result[5], result[6], result[7],

result[8], result[9], result[10], result[11],

result[12], result[13], result[14], result[15]

] lowercaseString];  //大小写注意

}

//输出大写

- (NSString *)upperMD5:(NSString *)inPutText

{

//传入参数,转化成char

const char *cStr = [inPutText UTF8String];

//开辟一个16字节的空间

unsigned char result[CC_MD5_DIGEST_LENGTH];

/*

extern unsigned char * CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法

把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了md这个空间中

*/

CC_MD5(cStr, (CC_LONG)strlen(cStr), result);

return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

result[0], result[1], result[2], result[3],

result[4], result[5], result[6], result[7],

result[8], result[9], result[10], result[11],

result[12], result[13], result[14], result[15]

] uppercaseString];  //大小写注意

}

调用 : 代码实现

NSLog(@"小写:%@",[self lowerMD5:@"123456"]);

NSLog(@"大写:%@",[self upperMD5:@"123456"]);

为了让MD5码更加安全 ,我们现在都采用加盐,盐要越长越乱,得到的MD5码就很难查到。

static NSString * salt =@"asdfghjklpoiuytrewqzxcvbnm";

NSLog(@"加盐小写:%@",[self lowerMD5:[@"123456" stringByAppendingString:salt]]);

NSLog(@"加盐大写:%@",[self upperMD5:[@"123456" stringByAppendingString:salt]]);

输出结果

2018-11-27 15:27:12.012590+0800 Encryption[12828:3995427]

小写:e10adc3949ba59abbe56e057f20f883e 2018-11-27 15:27:12.012774+0800

Encryption[12828:3995427] 大写:E10ADC3949BA59ABBE56E057F20F883E

2018-11-27 15:27:12.012901+0800 Encryption[12828:3995427]

加盐小写:71d1bda9346fab4eea309f4ed74b8f80 2018-11-27 15:27:12.013108+0800

Encryption[12828:3995427] 加盐大写:71D1BDA9346FAB4EEA309F4ED74B8F80

2、SHA1 算法是哈希算法的一种

代码实现 :

//sha1

- (NSString *)sha1:(NSString *)input

{

const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSData dataWithBytes:cstr length:input.length];

//使用对应的  CC_SHA1_DIGEST_LENGTH,CC_SHA224_DIGEST_LENGTH,CC_SHA256_DIGEST_LENGTH,CC_SHA384_DIGEST_LENGTH,CC_SHA512_DIGEST_LENGTH的长度分别是20,28,32,48,64。;看你们需求选择对应的长度

uint8_t digest[CC_SHA1_DIGEST_LENGTH];

CC_SHA1(data.bytes, (unsigned int)data.length, digest);

NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

for(int i=0; i

[output appendFormat:@"%02x", digest[i]];

}

NSLog(@"sha----->%@",output);

return output;

}

调用 代码实现 [self sha1:@"123456"];

运行结果 :

2018-11-27 15:27:12.013237+0800 Encryption[12828:3995427]

sha----7c4a8d09ca3762af61e59520943dc26494f8941b

3、RSA 非对称加密算法 (公钥私钥生成步骤点击)

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)

公开密钥与私有密钥是一对,用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;

特点:

非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了

具体代码:

.h

// return base64 encoded string

+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;

// return raw data

+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;

// return base64 encoded string

+ (NSString *)encryptString:(NSString *)str privateKey:(NSString *)privKey;

// return raw data

+ (NSData *)encryptData:(NSData *)data privateKey:(NSString *)privKey;

// decrypt base64 encoded string, convert result to string(not base64 encoded)

+ (NSString *)decryptString:(NSString *)str publicKey:(NSString *)pubKey;

+ (NSData *)decryptData:(NSData *)data publicKey:(NSString *)pubKey;

+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;

+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;

实现

static NSString *base64_encode_data(NSData *data){

data = [data base64EncodedDataWithOptions:0];

NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

return ret;

}

static NSData *base64_decode(NSString *str){

NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];

return data;

}

+ (NSData *)stripPublicKeyHeader:(NSData *)d_key{

// Skip ASN.1 p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值