iOS AES 与SHA256加密字符串

#import <CommonCrypto/CommonDigest.h>

#import <CommonCrypto/CommonCryptor.h>

#import "AESCrypt.h"


//使用sha256加密字符串

- (NSString*)sha256:(NSString *)value

{

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

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

    uint8_t digest[CC_SHA256_DIGEST_LENGTH];

    CC_SHA256(data.bytes, data.length, digest);

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

    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)

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

    return output;

}


//使用AES加密字符串

    NSString *cvv1 = [AESCrypt encrypt:cvv password:AESKEY];

    NSString *cardID1 = [AESCrypt encrypt:cardID password:@"F25C57635D167FE0118D023D6B9324DD"];

    NSString *expireDate1 = [AESCrypt encrypt:expireDate password:AESKEY];


+ (NSString *)encrypt:(NSString *)message password:(NSString *)password {

  NSData *encryptedData = [[message dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptedDataUsingKey:[[password dataUsingEncoding:NSUTF8StringEncoding] SHA256Hash] error:nil];

  NSString *base64EncodedString = [NSString base64StringFromData:encryptedData length:[encryptedData length]];

  return base64EncodedString;

}



+ (NSString *)base64StringFromData: (NSData *)data length: (int)length {

  unsigned long ixtext, lentext;

  long ctremaining;

  unsigned char input[3], output[4];

  short i, charsonline = 0, ctcopy;

  const unsigned char *raw;

  NSMutableString *result;

  

  lentext = [data length]; 

  if (lentext < 1) {

    return @"";

  }

  result = [NSMutableString stringWithCapacity: lentext];

  raw = [data bytes];

  ixtext = 0; 

  

  while (true) {

    ctremaining = lentext - ixtext;

    if (ctremaining <= 0) {

      break;

    }

    for (i = 0; i < 3; i++) { 

      unsigned long ix = ixtext + i;

      if (ix < lentext) {

        input[i] = raw[ix];

      }

      else {

        input[i] = 0;

      }

    }

    output[0] = (input[0] & 0xFC) >> 2;

    output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);

    output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);

    output[3] = input[2] & 0x3F;

    ctcopy = 4;

    switch (ctremaining) {

      case 1: 

        ctcopy = 2; 

        break;

      case 2: 

        ctcopy = 3; 

        break;

    }

    

    for (i = 0; i < ctcopy; i++) {

      [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];

    }

    

    for (i = ctcopy; i < 4; i++) {

      [result appendString: @"="];

    }

    

    ixtext += 3;

    charsonline += 4;

    

    if ((length > 0) && (charsonline >= length)) {

      charsonline = 0;

    }

  }     

  return result;

}



- (NSData *) AES256EncryptedDataUsingKey: (id) key error: (NSError **) error

{

CCCryptorStatus status = kCCSuccess;

NSData * result = [self dataEncryptedUsingAlgorithm: kCCAlgorithmAES128

                                                  key: key

                                              options: kCCOptionPKCS7Padding

                                                error: &status];

//

//    NSData * result = [self dataEncryptedUsingAlgorithm:kCCAlgorithmAES128

//                                                    key:key

//                                   initializationVector:nil

//                                                options:kCCOptionPKCS7Padding

//                                                  error:&status];

if ( result != nil )

return ( result );

if ( error != NULL )

*error = [NSError errorWithCCCryptorStatus: status];

return ( nil );

}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄权浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值