Android的Java的RSA解密 [英] Android-Java RSA decrypt

查看:368
本文介绍了Android的Java的RSA解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个公共密钥RSA算法从一个二进制字符串。

我的code是:

 字符串PUBKEY =tihq / Gk3OUs5NzP + XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9D​​zKaIbdKexb / MRR;

byte []的keyBytes = Base64.de code(PUBKEY,Base64.DEFAULT);
//测试,如果是正确的:确定
Log.d(回应keyBytes,新的String(Base64.en code(keyBytes,Base64.DEFAULT)));

的KeyFactory的KeyFactory = KeyFactory.getInstance(RSA);
X509En codedKeySpec规格=新X509En codedKeySpec(keyBytes);

RSAPublicKey公钥=(RSAPublicKey)keyFactory.generatePublic(规范);
//公钥公钥=(公钥)keyFactory.generatePublic(规范);
 

但我有此错误:

  java.security.spec.InvalidKeySpecException:java.lang.RuntimeException的:错误:0D0680A8:ASN1编码程序:ASN1_CHECK_TLEN:错标签
 

解决方案

解决。 现在的问题是,我有模数和指数,所以我一定要做到这一点:

 字符串PUBKEY =tihq / Gk3OUs5NzP + XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9D​​zKaIbdKexb / MRR; // 64 caratteri
字符串指数=AQAB;

byte []的keyBytes = Base64.de code(PUBKEY,Base64.DEFAULT);
byte []的exponentByte = Base64.de code(指数,Base64.DEFAULT);

的KeyFactory的KeyFactory = KeyFactory.getInstance(RSA);

RSAPublicKeySpec pubKeySpec =新RSAPublicKeySpec(新的BigInteger(keyBytes),新的BigInteger(exponentByte));
RSAPublicKey公钥=(RSAPublicKey)keyFactory.generatePublic(pubKeySpec);
 

i need to create a public key for RSA algorithm from a binary string.

My code is:

String pubKey = "tihq/Gk3OUs5NzP+XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9DzKaIbdKexb/mRr";

byte[] keyBytes = Base64.decode(pubKey,Base64.DEFAULT);
//test if is correct: ok
Log.d("response keyBytes",new String(Base64.encode(keyBytes,Base64.DEFAULT)));

KeyFactory keyFactory = KeyFactory.getInstance("RSA");      
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);

RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(spec);
//PublicKey publicKey = (PublicKey) keyFactory.generatePublic(spec);

But i have this error:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

解决方案

SOLVED. The problem is that i have modulus and exponent and so i must to do this:

String pubKey = "tihq/Gk3OUs5NzP+XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9DzKaIbdKexb/mRr"; //64 caratteri
String exponent = "AQAB";

byte[] keyBytes = Base64.decode(pubKey,Base64.DEFAULT);
byte[] exponentByte = Base64.decode(exponent,Base64.DEFAULT);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(keyBytes), new BigInteger(exponentByte));
RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);

这篇关于Android的Java的RSA解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆