当前位置: 代码迷 >> Android >> android施用rsa加密 在本地C代码中使用openssl签名结果和java中不同
  详细解决方案

android施用rsa加密 在本地C代码中使用openssl签名结果和java中不同

热度:33   发布时间:2016-05-01 09:56:36.0
android使用rsa加密 在本地C代码中使用openssl签名结果和java中不同
    OpenSSL_add_all_algorithms();
    EVP_PKEY *pPriKey;
    BIO *p_Bio_File;
    char * usr="root";
    p_Bio_File = BIO_new_file("990724.pem", "r");
    if(!p_Bio_File)
    {
        cout<<"file error"<<endl;
     return 0;
    }
    pPriKey = PEM_read_bio_PrivateKey(p_Bio_File, NULL, NULL,NULL);
    if (NULL == pPriKey)
    {
     cout<<"get key error"<<endl;
     return 0;
    }
    //fclose(pFile);
    BIO_free(p_Bio_File);
    char *mPackStr="{\"phonecode\":\"000000000000000\",\"mark\":\"1\"}";
    int mPackLen =strlen(mPackStr);
    EVP_MD_CTX mdctx;
    EVP_MD_CTX_init(&mdctx);
    if(!EVP_SignInit_ex(&mdctx,EVP_sha1(),NULL)) //签名初始化,设置摘要算法
    {
        printf("err\n");
        EVP_PKEY_free(pPriKey);
        return 0;
    }
    if(!EVP_SignUpdate(&mdctx,mPackStr,mPackLen)) //计算签名(摘要)Update
    {
        printf("err\n");
        EVP_PKEY_free(pPriKey);
        return 0;
    }
    unsigned int mSignLen = EVP_PKEY_size(pPriKey);
    unsigned char * pSignBuf = (unsigned char*)calloc(mSignLen+1, sizeof(char));
    if(!EVP_SignFinal(&mdctx,pSignBuf,&mSignLen,pPriKey))  //签名输出
    {
        printf("err\n");
        EVP_PKEY_free(pPriKey);
        return 0;
    }
    char * b=base64_encode((char *)pSignBuf);
    EVP_MD_CTX_cleanup(&mdctx);
    cout<<"签名结果:"<<endl;
    cout<<b<<endl;

和java
  相关解决方案