C android互通RSa加密,android使用rsa加密 在本土C代码中使用openssl签名结果和java中不同...

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<

return 0;

}

pPriKey = PEM_read_bio_PrivateKey(p_Bio_File, NULL, NULL,NULL);

if (NULL == pPriKey)

{

cout<

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<

cout<

和java

System.out.println("签名前的内容是"+singed);

byte[] sig=null;

try {

Signature dsa = Signature.getInstance("SHA1withRSA",new org.bouncycastle.jce.provider.BouncyCastleProvider());

//Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding",new org.bouncycastle.jce.provider.BouncyCastleProvider());

dsa.initSign(key);

dsa.update(singed.getBytes());

sig = dsa.sign();

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SignatureException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

String s=Base64EnAndDeCode.encode(sig);

System.out.println("签名后"+s);

什么问题导致签名结果不同呢?搞了好几天了。。囧。。就是结果不同。。

------解决思路----------------------

怎么解决阿?我遇到问题了。

------解决思路----------------------

接分来了,哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值