NSString加密相关扩展

//
//  NSString+Encrypt.h
//  CloudShopping
//
//  Created by sixiaobo on 14-7-9.
//  Copyright (c) 2014年 com.Uni2uni. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCrypto.h>
#import <sys/sysctl.h>
#import <sys/socket.h>
#import <net/if.h>
#import <net/if_dl.h>

/*!
 * @brief NSString扩展加密相关方法
 * @author huangyibiao
 */
@interface NSString (Encrypt)

/*!
 * @brief 将字符串本身进行md5加密,并将加密后的字符串返回
 * @return 返回加密后的字符串
 */
- (NSString *)md5;

//! sha1加密
- (NSString *)sha1;

//! 获取网卡的MAC地址
+ (NSString *)obtainMacAddress;

@end
//
//  NSString+Encrypt.m
//  CloudShopping
//
//  Created by sixiaobo on 14-7-9.
//  Copyright (c) 2014年 com.Uni2uni. All rights reserved.
//

#import "NSString+Encrypt.h"
#import "NSString+Hashing.h"

@implementation NSString (Encrypt)

#pragma mark - md5加密
- (NSString *)md5 {
    return self.MD5Hash;
}

#pragma mark - sha1加密方法
- (NSString *)sha1 {
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

#pragma mark - 获取MAC地址
+ (NSString *)obtainMacAddress {
    int                    mib[6];
    size_t                 len;
    char                   *buf;
    unsigned char          *ptr;
    struct if_msghdr       *ifm;
    struct sockaddr_dl     *sdl;

    mib[0] = CTL_NET;
    mib[1] = AF_ROUTE;
    mib[2] = 0;
    mib[3] = AF_LINK;
    mib[4] = NET_RT_IFLIST;

    if ((mib[5] = if_nametoindex("en0")) == 0) {
        printf("Error: if_nametoindex error\n");
        return NULL;
    }

    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
        printf("Error: sysctl, take 1\n");
        return NULL;
    }

    if ((buf = malloc(len)) == NULL) {
        printf("Could not allocate memory. error!\n");
        return NULL;
    }

    if (sysctl(mib, 6, buf, &len, NULL, 0) > 0) {
        free(buf);
        printf("Error: sysctl, take 2");
        return NULL;
    }

    ifm = (struct if_msghdr *)buf;
    sdl = (struct sockaddr_dl *)(ifm + 1);
    ptr = (unsigned char *)LLADDR(sdl);
    NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x",
                           *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
    free(buf);

    return [outstring uppercaseString];
}

@end
时间: 2024-08-02 10:00:11

NSString加密相关扩展的相关文章

python flask-flak不能正常使用。直接在GitHbu上复制的源码,但是出现错误。相关扩展均已安装,如图

问题描述 flak不能正常使用.直接在GitHbu上复制的源码,但是出现错误.相关扩展均已安装,如图 问题出在from flask.ext.script import Manager上,显示unresolved import Manager,但是可以在CMD中运行,在 eclipse中就显示错误.stackoverflow,谷歌,百度,都找不到解决方法~求助~ 解决方案 那就是你安装的flask是否在eclipse中能够找到安装的包. 直接命令行中能不能编译,运行.

《计算机网络课程设计(第2版)》——3.5节相关扩展

3.5 相关扩展 除了上面介绍的方法之外,还有其他一些算法可以完成CRC校验.例如,多项式除法可用除法电路来实现.除法电路的主体由一组移位寄存器和模2加法器(异或单元)组成.以CRC-ITU为例,它由16级移位寄存器和3个加法器组成,图3-5给出了除法电路实现CRC的示意图(编码/解码共用).编码.解码前将各寄存器初始化为"1",信息位按照时钟周期依次移入.当信息位全部输入后,从寄存器组输出CRC结果. 1. 比特型算法 上面的CRC-ITU除法电路可以用软件来模拟.定义一个寄存器组,

yum命令安装php7和相关扩展_php技巧

安装php7和相关扩展 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm (nginx) rpm -Uvh http://rpms.famillecollet.com/en

《计算机网络课程设计(第2版)》——2.5节相关扩展

2.5 相关扩展前面我们提到,校验和还有其他一些计算方法,下面我们就来简要介绍一下利用延迟进位法进行计算的方法.延迟进位法的算法描述:将进位累加的过程延迟到整个累加循环结束之后进行,这样可以提高计算速度. 主要的实现过程 while(!infile.eof()) //判断文件是否结束, 若否则对被校验的16位数据进行累加 { int h,l; //分别表示16位数据的高8位和低8位 infile>>hex>>h; //从文件中读入一个16进制表示的数据, 作为高8位 if(infi

优酷反屏蔽广告机制与Firefox相关扩展冲突的说明

昨天优酷网更新了其Flash播放器,其中最重要的更新就是引入了反屏蔽广告机制. 如果用户了安装了屏蔽广告的扩展,脚本,hosts修改,或者其他屏蔽广告的工具,优酷播放视频前会显示如下提示. 针对Firefox用户,目前屏蔽优酷广告的主要扩展为Adblock Plus,和youku相关油猴子脚本. 建议在优酷修改器反屏蔽广告政策之前禁用前在优酷网禁用相关屏蔽广告扩展后脚本,以便正常观看视频. 相关屏蔽广告扩展及脚本修改建议如下: 1.Adblock Plus中针对屏蔽优酷广告的订阅为China L

加密相关的一些方法

(1)求两个字节数组的异或 Java代码   /***       * 求异或.       *        * @param strOldHex  : hex string       * @param strKeyHex  : hex string       * @return       */       public static byte[] xOR(String strOldHex, String strKeyHex) {           byte[] oldBytes = 

ubuntu lamp(apache+mysql+php) 环境搭建及相关扩展更新_Linux

一.环境安装 1.安装apache2 sudo apt-get install apache2 安装后在浏览器中打开:http://localhost/或者http://127.0.0.1 如果出现It works!证明apache安装成功. 2.安装PHP sudo apt-get install php5 sudo apt-get install libapache2-mod-php5 sudo /etc/init.d/apache2 restart 测试: sudo vi /var/www

PHP的openssl加密扩展使用小结(推荐)

引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求).数据完整性(没有被人修改过).数据私密性(密文,无法直接读取)等.虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密. 虽然对于一般的WEB开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要.

PHP加密扩展库Mcrypt安装和实例_php实例

mcrypt简单介绍PHP程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障.PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库Mcrypt和Mhash.其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原.mcrypt 是 php 里面重要的加密支持扩展库,linux环境下:该库在默认情况下不开启.window环境下:PHP>=5.3,默认开启mcrypt扩展.1.Mcrypt()库的安装 mcypt是一