zoukankan      html  css  js  c++  java
  • 加密

    1. base64的加密和解密

    -(void)base64EncodeDate{

        NSString *path = @"/Users/wangqiao/Desktop/1.png";

        NSData *data = [NSData dataWithContentsOfFile:path];

        NSData *base64Date = [data base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];

    //    NSData *base64DataStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

        [base64Date writeToFile:@"/Users/wangqiao/Desktop/base64" atomically:YES];

        

        //base64 解密

        NSData *endata = [[NSData alloc]initWithBase64EncodedData:base64Date options:NSDataBase64DecodingIgnoreUnknownCharacters];

        [endata writeToFile:@"/Users/wangqiao/Desktop/2.png" atomically:YES];

    }

    2.md5的加密

      中文名:信息摘要算法,是一种散列函数,生成一个固定长度的字符串.算法公开,但不可逆

      NSString *str = @"12345";

        NSString *salt = @"salt";

        [str stringByAppendingString:salt];

        str = [str md5String];

        NSLog(@"str = %@",str);

    /**

     *  计算MD5散列结果

     *

     *  终端测试命令:

     *  @code

     *  md5 -s "string"

     *  @endcode

     *  <p>提示:随着 MD5 碰撞生成器的出现,MD5 算法不应被用于任何软件完整性检查或代码签名的用途。<p>

     *  @return 32个字符的MD5散列字符串

     */

    - (NSString *)md5String{

      const char *str = self.UTF8String;

        uint8_t buffer[CC_MD5_DIGEST_LENGTH];

        CC_MD5(str, (CC_LONG)strlen(str), buffer);

         return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];

    }

    /**

     *  计算SHA1散列结果

     *

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha1

     *  @endcode

     *  @return 40个字符的SHA1散列字符串

     */

    - (NSString *)sha1String{

      const char *str = self.UTF8String;

        uint8_t buffer[CC_SHA1_DIGEST_LENGTH];

        CC_SHA1(str, (CC_LONG)strlen(str), buffer);

        return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];

    }

    /**

     *  计算SHA256散列结果

     *

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha256

     *  @endcode

     *  @return 64个字符的SHA256散列字符串

     */

    - (NSString *)sha256String{

      const char *str = self.UTF8String;

        uint8_t buffer[CC_SHA256_DIGEST_LENGTH];

        CC_SHA256(str, (CC_LONG)strlen(str), buffer);

        return [self stringFromBytes:buffer length:CC_SHA256_DIGEST_LENGTH];

    }

    /**

     *  计算SHA 512散列结果

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha512

     *  @endcode

     *  @return 128个字符的SHA 512散列字符串

     */

    - (NSString *)sha512String{

      const char *str = self.UTF8String;

        uint8_t buffer[CC_SHA512_DIGEST_LENGTH];

           CC_SHA512(str, (CC_LONG)strlen(str), buffer);

           return [self stringFromBytes:buffer length:CC_SHA512_DIGEST_LENGTH];

    }

    #pragma mark - HMAC 散列函数

    /**

     *  计算HMAC MD5散列结果

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl dgst -md5 -hmac "key"

     *  @endcode

     *  @return 32个字符的HMAC MD5散列字符串

     */

    - (NSString *)hmacMD5StringWithKey:(NSString *)key

    {

      const char *keyData = key.UTF8String;

        const char *strData = self.UTF8String;

        uint8_t buffer[CC_MD5_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData, strlen(strData), buffer);

         return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH][

    }

    /**

     *  计算HMAC SHA1散列结果

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha1 -hmac "key"

     *  @endcode

     *  @return 40个字符的HMAC SHA1散列字符串

     */

    - (NSString *)hmacSHA1StringWithKey:(NSString *)key

    {

      const char *keyData = key.UTF8String;

        const char *strData = self.UTF8String;

        uint8_t buffer[CC_SHA1_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgSHA1, keyData, strlen(keyData), strData, strlen(strData), buffer);

        return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];

    }

    /**

     *  计算HMAC SHA256散列结果

     *

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha256 -hmac "key"

     *  @endcode

     *  @return 64个字符的HMAC SHA256散列字符串

     */

    - (NSString *)hmacSHA256StringWithKey:(NSString *)key{

      const char *keyData = key.UTF8String;

        const char *strData = self.UTF8String;

        uint8_t buffer[CC_SHA256_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgSHA256, keyData, strlen(keyData), strData, strlen(strData), buffer);

        return [self stringFromBytes:buffer length:CC_SHA256_DIGEST_LENGTH];

    }

    /**

     *  计算HMAC SHA512散列结果

     *  终端测试命令:

     *  @code

     *  echo -n "string" | openssl sha -sha512 -hmac "key"

     *  @endcode

     *  @return 128个字符的HMAC SHA512散列字符串

     */

    - (NSString *)hmacSHA512StringWithKey:(NSString *)key

    {

      const char *keyData = key.UTF8String;

        const char *strData = self.UTF8String;

        uint8_t buffer[CC_SHA512_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgSHA512, keyData, strlen(keyData), strData, strlen(strData), buffer);

         return [self stringFromBytes:buffer length:CC_SHA512_DIGEST_LENGTH];

    }

    #pragma mark - 文件散列函数

    /**

     *  计算文件的MD5散列结果

     *  终端测试命令:

     *  @code

     *  md5 file.dat

     *  @endcode

     *  @return 32个字符的MD5散列字符串

     */

    - (NSString *)fileMD5Hash{

      

    NSFileHandle *fp = [NSFileHandle fileHandleForReadingAtPath:self];

        if (fp == nil) {

            return nil;

        }

        

        CC_MD5_CTX hashCtx;

        CC_MD5_Init(&hashCtx);

        

        while (YES) {

            @autoreleasepool {

                NSData *data = [fp readDataOfLength:FileHashDefaultChunkSizeForReadingData];

                

                CC_MD5_Update(&hashCtx, data.bytes, (CC_LONG)data.length);

                

                if (data.length == 0) {

                    break;

                }

            }

        }

        [fp closeFile];

        

        uint8_t buffer[CC_MD5_DIGEST_LENGTH];

        CC_MD5_Final(buffer, &hashCtx);

        return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];

    }

    /**

     *  计算文件的SHA1散列结果

     *

     *  终端测试命令:

     *  @code

     *  openssl sha -sha1 file.dat

     *  @endcode

     *

     *  @return 40个字符的SHA1散列字符串

     */

    - (NSString *)fileSHA1Hash{

      

     NSFileHandle *fp = [NSFileHandle fileHandleForReadingAtPath:self];

        if (fp == nil) {

            return nil;

        }

        

        CC_SHA1_CTX hashCtx;

        CC_SHA1_Init(&hashCtx);

        

        while (YES) {

            @autoreleasepool {

                NSData *data = [fp readDataOfLength:FileHashDefaultChunkSizeForReadingData];

                

                CC_SHA1_Update(&hashCtx, data.bytes, (CC_LONG)data.length);

                

                if (data.length == 0) {

                    break;

                }

            }

        }

        [fp closeFile];

        

        uint8_t buffer[CC_SHA1_DIGEST_LENGTH];

        CC_SHA1_Final(buffer, &hashCtx);

        

        return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];

    }

    /**

     *  计算文件的SHA256散列结果

     *

     *  终端测试命令:

     *  @code

     *  openssl sha -sha256 file.dat

     *  @endcode

     *

     *  @return 64个字符的SHA256散列字符串

     */

    - (NSString *)fileSHA256Hash{

      

    NSFileHandle *fp = [NSFileHandle fileHandleForReadingAtPath:self];

        if (fp == nil) {

            return nil;

        }

        

        CC_SHA256_CTX hashCtx;

        CC_SHA256_Init(&hashCtx);

        

        while (YES) {

            @autoreleasepool {

                NSData *data = [fp readDataOfLength:FileHashDefaultChunkSizeForReadingData];

                

                CC_SHA256_Update(&hashCtx, data.bytes, (CC_LONG)data.length);

                

                if (data.length == 0) {

                    break;

                }

            }

        }

        [fp closeFile];

        

        uint8_t buffer[CC_SHA256_DIGEST_LENGTH];

        CC_SHA256_Final(buffer, &hashCtx);

        

        return [self stringFromBytes:buffer length:CC_SHA256_DIGEST_LENGTH];

    }

    /**

     *  计算文件的SHA512散列结果

     *

     *  终端测试命令:

     *  @code

     *  openssl sha -sha512 file.dat

     *  @endcode

     *

     *  @return 128个字符的SHA512散列字符串

     */

    - (NSString *)fileSHA512Hash{

      

    NSFileHandle *fp = [NSFileHandle fileHandleForReadingAtPath:self];

        if (fp == nil) {

            return nil;

        }

        

        CC_SHA512_CTX hashCtx;

        CC_SHA512_Init(&hashCtx);

        

        while (YES) {

            @autoreleasepool {

                NSData *data = [fp readDataOfLength:FileHashDefaultChunkSizeForReadingData];

                

                CC_SHA512_Update(&hashCtx, data.bytes, (CC_LONG)data.length);

                

                if (data.length == 0) {

                    break;

                }

            }

        }

        [fp closeFile];

        uint8_t buffer[CC_SHA512_DIGEST_LENGTH];

        CC_SHA512_Final(buffer, &hashCtx);

        return [self stringFromBytes:buffer length:CC_SHA512_DIGEST_LENGTH];

    }

    #pragma mark - 助手方法

    /**

     *  返回二进制 Bytes 流的字符串表示形式

     *

     *  @param bytes  二进制 Bytes 数组

     *  @param length 数组长度

     *

     *  @return 字符串表示形式

     */

    - (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {

        NSMutableString *strM = [NSMutableString string];

        

        for (int i = 0; i < length; i++) {

            [strM appendFormat:@"%02x", bytes[i]];

        }

        

        return [strM copy];

    }

    3.动态密码

    -(NSString *)dynamicPassword

    {

        NSString *password = @"123456";

        //私钥

        NSString *hmacKey = @"sfbjldajldjasjfasfja";

        

        //对密码和私钥进行一次加密

        password = [password hmacMD5StringWithKey:hmacKey];

        

        //取出当前时间

        NSDate *date = [NSDate date];

        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

        [formatter setDateFormat:@"yyyy-MM-dd HH:mm"];

        NSString *timer = [formatter stringFromDate:date];

        

        //第一次加密的密码拼接时间

        password = [password stringByAppendingString:timer];

        

        //增加了时间戳的字符串进行hmac运算

        password = [password hmacMD5StringWithKey:hmacKey];

        

        return password;

        

    }

  • 相关阅读:
    JDBC事务处理
    JDBC之LOB数据类型
    使用JDBC驱动程序处理元数据
    JDBC之PreparedStatement
    JDBC主要API学习总结
    JDBC简介
    ForkJoinPool 分支/合并框架
    线程池
    线程八锁
    jQuery中的事件冒泡
  • 原文地址:https://www.cnblogs.com/PJXWang/p/5622468.html
Copyright © 2011-2022 走看看