当前位置:  编程技术>移动开发
本页文章导读:
    ▪[super viewDidLoad]跟[super viewDidUnload]的调用时机        [super viewDidLoad]和[super viewDidUnload]的调用时机 [super viewDidLoad]和[super viewDidUnload]的调用时机   在iPhone/iPad编程中,viewDidLoad方法用于在试图控制器中加载视图时的初始化处理 在《iPhone4与iPad开发.........
    ▪ [转]CryptoAPI与OpenSSL数字签名与证验交互        [转]CryptoAPI与OpenSSL数字签名与验证交互 http://www.linuxidc.com/Linux/2012-08/68721.htm这里(http://www.linuxidc.com/Linux/2012-08/68722.htm)写过了RSA非对称加密解密的交互方式,其实数字签名也是RSA非对称加.........
    ▪ 百度统计透露国内浏览器市场份额最新变化       百度统计披露国内浏览器市场份额最新变化 百度统计发布的最新统计数据显示,自北京时间3月15日中午12点正式发布以来,IE 9.0正式版受到了国内网友的热烈欢迎。截止到北京时间3月22日24点.........

[1][super viewDidLoad]跟[super viewDidUnload]的调用时机
    来源: 互联网  发布时间: 2014-02-18
[super viewDidLoad]和[super viewDidUnload]的调用时机

[super viewDidLoad]和[super viewDidUnload]的调用时机

 

在iPhone/iPad编程中,viewDidLoad方法用于在试图控制器中加载视图时的初始化处理

在《iPhone4与iPad开发基础教程》中出现过两种写法

 

第一种写法:

- (void)viewDidLoad {

    [super viewDidLoad];

    // 其他代码

}

 

第二种写法:

- (void)viewDidLoad {

     // 其他代码

    [super viewDidLoad];

}

 

不过,我觉得第一种写法更可取,先调用父类的加载代码,再进行自身的加载。

 

viewDidUnload方法用于在卸载视图时的释放资源处理,比如释放输出口、释放内存等

- (void)viewDidUnload {

    // 释放代码,比如:self.xxx = nil;

    [super viewDidUnload];

}

 

 


    
[2] [转]CryptoAPI与OpenSSL数字签名与证验交互
    来源: 互联网  发布时间: 2014-02-18
[转]CryptoAPI与OpenSSL数字签名与验证交互
http://www.linuxidc.com/Linux/2012-08/68721.htm

这里(http://www.linuxidc.com/Linux/2012-08/68722.htm)写过了RSA非对称加密解密的交互方式,

其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要

CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互已经提到关于证书和私钥的数据以及对象获取,这里就不再重复讨论

1.openssl的签名及验证

void opensslSigner::sign(EVP_PKEY* evpKey,BYTE** signValue,unsigned int &signLen,BYTE* text,int textLen)  
{  
    EVP_MD_CTX mdctx;   //摘要算法上下文变量     
       
    if(evpKey == NULL)    
    {    
        printf("EVP_PKEY_new err\n");    
        return;    
    }    
      
    //以下是计算签名的代码     
    EVP_MD_CTX_init(&mdctx);        //初始化摘要上下文     
    if(!EVP_SignInit_ex(&mdctx,EVP_md5(),NULL)) //签名初始化,设置摘要算法     
    {    
        printf("err\n");    
        EVP_PKEY_free(evpKey);    
        return;    
    }    
    if(!EVP_SignUpdate(&mdctx,text,textLen)) //计算签名(摘要)Update     
    {    
        printf("err\n");    
        EVP_PKEY_free(evpKey);    
        return;    
    }    
    if(!EVP_SignFinal(&mdctx,*signValue,&signLen,evpKey))  //签名输出     
    {    
        printf("err\n");    
        EVP_PKEY_free(evpKey);    
        return;    
    }    
    printf("消息\"%s\"的签名值是:\n",text);    
    printByte(*signValue,signLen);  
    printf("\n");    
    EVP_MD_CTX_cleanup(&mdctx);    
  
}  
  
void opensslSigner::verify(EVP_PKEY* evpKey,BYTE* text,unsigned int textLen,BYTE* signValue,unsigned int signLen)  
{  
    ERR_load_EVP_strings();  
    EVP_MD_CTX mdctx;   //摘要算法上下文变量     
    EVP_MD_CTX_init(&mdctx);    //初始化摘要上下文     
    if(!EVP_VerifyInit_ex(&mdctx, EVP_md5(), NULL)) //验证初始化,设置摘要算法,一定要和签名一致     
    {    
        printf("EVP_VerifyInit_ex err\n");    
        EVP_PKEY_free(evpKey);    
        return;    
    }    
    if(!EVP_VerifyUpdate(&mdctx, text, textLen)) //验证签名(摘要)Update     
    {    
        printf("err\n");    
        EVP_PKEY_free(evpKey);    
        return;    
    }    
    if(!EVP_VerifyFinal(&mdctx,signValue,signLen,evpKey))    
    {    
        printf("verify err\n");    
        EVP_PKEY_free(evpKey);    
        EVP_MD_CTX_cleanup(&mdctx);    
        return;  
    }    
    else    
    {    
        printf("验证签名正确.\n");    
    }    
    //释放内存     
    EVP_PKEY_free(evpKey);    
    EVP_MD_CTX_cleanup(&mdctx);    
}  
2.CryptoAPI的签名验证

依然是私钥的问题,没时间再去尝试导入私钥,暂且只写验证

因为也是RSA加密,所以同样要注意字节排列方式,具体看RSA加密的交互部分

void verify(HCRYPTPROV hProv,PCCERT_CONTEXT cert,BYTE* text,unsigned long len,BYTE* signValue,unsigned long signLen)  
{  
        //反序与openssl一致   
    for(int i = 0 ; i < signLen / 2;i++)  
    {  
        BYTE temp = signValue[i];  
        signValue[i] = signValue[signLen - i - 1];  
        signValue[signLen - i - 1] = temp;  
    }  
  
    // 创建离散对象       
    HCRYPTHASH hHash = NULL;      
    if(!CryptCreateHash(      
        hProv,                        // 容器句柄        
        CALG_MD5,                    // 算法标识       
        NULL,                        // 算法使用的Key       
        0,                            // 算法标识       
        &hHash))                    // 返回的HASH对象       
    {      
        printf("CryptCreateHash error:0X%x.\n",GetLastError());  
        return;  
    }      
      
    // 计算数据摘要       
    if(CryptHashData(hHash, text, len, 0) == 0)      
    {      
        printf("CryptHashData error:0X%x.\n",GetLastError());  
        return;  
    }      
  
  
    if(cert == NULL)      
    {      
        printf("pCertContext == NULL:0X%x.\n",GetLastError());  
        return;  
    }      
    //获取公钥句柄     
    HCRYPTKEY hPubKey;      
    if(!CryptImportPublicKeyInfo(hProv, cert->dwCertEncodingType, &cert->pCertInfo->SubjectPublicKeyInfo, &hPubKey))      
    {      
        printf("CryptImportPublicKeyInfo error:0X%x.\n",GetLastError());  
        return;  
    }      
    //验证签名     
    if(!CryptVerifySignature(hHash, signValue, signLen, hPubKey, NULL, 0))      
    {      
        printf("CryptVerifySignature error:0X%x.\n",GetLastError());  
        return;  
    }      
    cout << "sign verify successfully" << endl;  
}  

    
[3] 百度统计透露国内浏览器市场份额最新变化
    来源: 互联网  发布时间: 2014-02-18
百度统计披露国内浏览器市场份额最新变化

百度统计发布的最新统计数据显示,自北京时间3月15日中午12点正式发布以来,IE 9.0正式版受到了国内网友的热烈欢迎。截止到北京时间3月22日24点,IE 9.0在国内市场占有率达到了0.42%,排在所有浏览器的第12位。与IE 9.0市场占有率不断上升相对应的是,微软旗下IE 6.0,IE 7.0,IE 8.0的市场占有率略有动荡,其中IE 6.0,IE 8.0的市场份额分别下降了0.78%,0.29%,IE 7.0的市场份额上升了0.22%。

微软表示,IE 9.0相对于IE7.0和IE 8.0性能更强,速度更快,页面更简洁,安全性更佳。有理由相信,随着更多的网友加入IE 9.0 新版浏览器的阵营,IE 9.0在未来会赢得更多的拥趸。

IE 9.0的正式发布引起了国内浏览器市场的轻微动荡。发布一周以来,国内浏览器TOP10的市场份额变化如下:

值得注意的是,国内的浏览器市场并非微软IE浏览器一家独大。最新的国内浏览器的市场份额情况如下:

国内浏览器排名前三的仍然是IE 6.0,360安全浏览器,IE 8.0,分别占到了市场份额的39.68%,18.57%,15.67%。微软凭借IE浏览器与操作系统绑定这一得天独厚的优势,仍然拿到了浏览器市场的 65.34%。在国产浏览器中,360安全浏览器以18.57%的市场份额稳坐头把交椅,也成为从微软旗下浏览器中杀出重围的唯一黑马。

随着IE 9.0正式加入浏览器阵营,IE 9.0是否能够帮助微软巩固优势,扩大市场份额,并引爆新一轮的浏览器大战,让我们拭目以待。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3