当前位置:  编程技术>移动开发
本页文章导读:
    ▪asList 后的remove错误        asList 后的remove异常 同样下面两组代码   情况一: rUidList = new ArrayList<String>(); rUidList.add("1"); rUidList.add("2"); rUidList.add("3"); rUidList.remove(“1”);   情况二: String str = "1,2,3,4"; rUidList = Arra.........
    ▪ [OpenSSL][原]取得文件签名        [OpenSSL][原]获得文件签名 测试数据链接:http://jacky-dai.iteye.com/admin/blogs/1743774 #include <openssl/rsa.h> #include <openssl/evp.h> #pragma comment(lib, "libeay32.lib") void ReverseBuffer(unsigned char *pBuf, u.........
    ▪ [MS Crypt API][原]计算资料hashParam       [MS Crypt API][原]计算文件hashParam #define SAIO_CSP "SAIO SignCSP" typedef enum Em_Algorithm_TYPE { AlgorithmType_SHA1 = 1, AlgorithmType_SHA256 = 2 }ALGORITHM_TYPE, *PALGORITHM_TYPE; BOOL GetFile.........

[1]asList 后的remove错误
    来源: 互联网  发布时间: 2014-02-18
asList 后的remove异常

同样下面两组代码

 

情况一:

rUidList = new ArrayList<String>();

rUidList.add("1");

rUidList.add("2");

rUidList.add("3");

rUidList.remove(“1”);

 

情况二:

String str = "1,2,3,4";

rUidList = Arrays.asList(str.split(","));

rUidList.remove(“1”);

 

 

情况一:没有问题

情况二:报Exception in thread "main" java.lang.UnsupportedOperationException

 

这个java的一个bug吧。没有找到第二种情况为什么错??哪位大侠知道为什么第二种情况报错。

 

1 楼 yangfuchao418 前天  
http://www.cnblogs.com/zolra/archive/2011/03/02/1969235.html

    
[2] [OpenSSL][原]取得文件签名
    来源: 互联网  发布时间: 2014-02-18
[OpenSSL][原]获得文件签名
测试数据链接:http://jacky-dai.iteye.com/admin/blogs/1743774

#include <openssl/rsa.h>  
#include <openssl/evp.h>  
#pragma comment(lib, "libeay32.lib") 

void ReverseBuffer(unsigned char *pBuf, unsigned long ulLen)
{
    if(0 == ulLen)
    {
        return;
    }

    //char tmp;
    unsigned char ucTemp;
    for(unsigned long i = 0, j = ulLen-1; i < ulLen/2; i++, j--)
    {
        ucTemp = pBuf[i];
        pBuf[i] = pBuf[j];
        pBuf[j] = ucTemp;
    }
}

void OpenSSLGenFileSignature_byFile()
{
    RSA* rsa = RSA_new();
    MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);

    EVP_PKEY *evpKey = EVP_PKEY_new(); //新建一个EVP_PKEY变量
    EVP_PKEY_set1_RSA(evpKey, rsa);

    const EVP_MD* algrothm = EVP_sha1();
    EVP_MD_CTX mdctx;
    EVP_MD_CTX_init(&mdctx);
    EVP_VerifyInit_ex(&mdctx, algrothm, NULL);

    byte file[512] = {0};
    DWORD dwFileSize = sizeof(file);
    ReadBufferFromFile("PublicKey.bin", file, &dwFileSize);

    EVP_SignUpdate(&mdctx, file, dwFileSize);

    BYTE signValue[128] = {0};
    UINT signLen = 0;
    EVP_SignFinal(&mdctx, signValue, &signLen, evpKey);

    EVP_MD_CTX_cleanup(&mdctx);
    EVP_PKEY_free(evpKey);

    RSA_free(rsa);
}

void OpenSSLGenFileSignature_byFileHash()
{
    RSA* rsa = RSA_new();
    MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);

    const EVP_MD* algrothm = EVP_sha1();

    byte byHashData[32] = {0};
    DWORD dwHashSize = sizeof(byHashData);
    ReadBufferFromFile("HashData.bin", byHashData, &dwHashSize);
    ReverseBuffer(byHashData, dwHashSize);

    byte bySignedBuf[512] = {0};
    UINT nSignSize = 0;
    int nRet = RSA_sign(algrothm->type, byHashData, (UINT)dwHashSize, bySignedBuf, &nSignSize, rsa);
    RSA_free(rsa);
}

    
[3] [MS Crypt API][原]计算资料hashParam
    来源: 互联网  发布时间: 2014-02-18
[MS Crypt API][原]计算文件hashParam
#define    SAIO_CSP                              "SAIO SignCSP"

typedef enum  Em_Algorithm_TYPE
{
    AlgorithmType_SHA1    = 1,
    AlgorithmType_SHA256  = 2
}ALGORITHM_TYPE, *PALGORITHM_TYPE;


BOOL GetFileHashParam(LPCSTR lpszCataFileName, PBYTE pbyHash, PDWORD pdwHashLen, ALGORITHM_TYPE emAlAlgorithmType)
{
    BOOL bRet = FALSE;
    HCRYPTPROV hProv = 0;
    HCRYPTHASH hHash = 0;
    HCRYPTKEY hKey = 0;
    HANDLE hFile = NULL;
    DWORD dwFileSize = 0, len;
    BYTE byTempBuf[2049] = {0};

    hFile = CreateFile(lpszCataFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (INVALID_HANDLE_VALUE == hFile)
    {
        return FALSE;
    }

    DWORD  dwProvType = PROV_RSA_AES;
    ALG_ID hashAlgo = CALG_SHA_256;
    if (AlgorithmType_SHA1 == emAlAlgorithmType)
    {
        dwProvType = PROV_RSA_FULL;
        hashAlgo = CALG_SHA1;
    }

    if (!CryptAcquireContext(&hProv, SAIO_CSP, NULL, dwProvType, 0)) 
    {
        if (GetLastError() == NTE_BAD_KEYSET)
        {
            if(!CryptAcquireContext(&hProv,SAIO_CSP,NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) 
            {
                goto HashExit;
            }
        }
    }

    // 
    //     Create a hash object.
    //     
    DWORD dwError = 0;
    if ( !CryptCreateHash(hProv, hashAlgo ,0 ,0 ,&hHash))
    {
        dwError = GetLastError();
        goto HashExit;
    }

    dwFileSize = GetFileSize(hFile, NULL);
    while(dwFileSize != 0)
    {
        bRet = ReadFile(hFile, byTempBuf, 2048, &len, NULL);
        // 
        //     Check for end of file. 
        //     
        if (bRet && len==0)
        {
            break;
        }

        CryptHashData(hHash, byTempBuf, len, 0);
        dwFileSize -= len;
    }

    if (hFile != NULL)
    {
        CloseHandle(hFile);
    }

    len = 0;
    DWORD dwCount = sizeof(DWORD);
    if(!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)pdwHashLen, &dwCount, 0))
    {
        *pdwHashLen = 0;
    }
    else
    {
        if (!CryptGetHashParam(hHash, HP_HASHVAL, pbyHash, pdwHashLen, 0))
        {
            *pdwHashLen = 0;
        }
    }

    if (*pdwHashLen != 20
        && *pdwHashLen != 32)
    {
        bRet = FALSE;
    }

HashExit:  
    if (hKey != NULL)
    {
        CryptDestroyKey(hKey);
    }

    if (hHash != NULL)
    {
        CryptDestroyHash(hHash);
    }

    if (hProv != NULL)
    {
        CryptReleaseContext(hProv, 0);
    }

    return bRet;
}

    
最新技术文章:
▪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