将PHP RSA PublicKey转换为Android PublicKey
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将PHP RSA PublicKey转换为Android PublicKey,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2849字,纯文字阅读大概需要5分钟。
内容图文
![将PHP RSA PublicKey转换为Android PublicKey](/upload/InfoBanner/zyjiaocheng/799/a3bdbd08c218494f860d448b14172912.jpg)
我正在研究基于客户端服务器的应用程序.
我以这种格式获得PublicKey的地方
因为我把它保存到String中.
现在我想在我的Android(Java代码)中使用这个键,我该如何使用它?
解决方法:
首先,您需要从您提供的pem格式生成公钥,这是我执行此操作的方法:
/**
*
* @param PEMString -A file/string in .pem format with a generated RSA key (with "des3", using "openssl genrsa".)
* @param isFilePath - If it's a file path or a string
* @return java.security.PublicKey
* @throws IOException -No key found
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*
* @author hsigmond
*/
private static PublicKey getPublicKeyFromPemFormat(String PEMString,
boolean isFilePath) throws IOException, NoSuchAlgorithmException,
InvalidKeySpecException {
BufferedReader pemReader = null;
if (isFilePath) {
pemReader = new BufferedReader(new InputStreamReader(
new FileInputStream(PEMString)));
} else {
pemReader = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(PEMString.getBytes("UTF-8"))));
}
StringBuffer content = new StringBuffer();
String line = null;
while ((line = pemReader.readLine()) != null) {
if (line.indexOf("-----BEGIN PUBLIC KEY-----") != -1) {
while ((line = pemReader.readLine()) != null) {
if (line.indexOf("-----END PUBLIC KEY") != -1) {
break;
}
content.append(line.trim());
}
break;
}
}
if (line == null) {
throw new IOException("PUBLIC KEY" + " not found");
}
Log.i("PUBLIC KEY: ", "PEM content = : " + content.toString());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(new X509EncodedKeySpec(Base64.decode(content.toString(), Base64.DEFAULT)));
}
以下是我如何使用它来读取(解码)使用提供的公钥签名的内容.
/**
*
* @param PEMString -A file/string in .pem format with a generated RSA key (with "des3", using "openssl genrsa".)
* @param content
* @return String value of content Decoded
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
* @throws IOException
* @throws NoSuchProviderException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*
* @author hsigmond
*/
public static String getContentWithPublicKeyFromPemFormat(String PEMString,
String content,boolean isFilePath) throws NoSuchAlgorithmException,
InvalidKeySpecException, IOException, NoSuchProviderException,
NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
PublicKey publicKey = getPublicKeyFromPemFormat(PEMString,isFilePath);
if (publicKey != null)
Log.i("PUBLIC KEY: ", "FORMAT : " + publicKey.getFormat()
+ " \ntoString : " + publicKey.toString());
byte[] contentBytes = Base64.decode(content, Base64.DEFAULT);
byte[] decoded = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");//BC=BouncyCastle Provider
cipher.init(Cipher.DECRYPT_MODE, publicKey);
decoded = cipher.doFinal(contentBytes);
return new String(decoded, "UTF-8");
}
内容总结
以上是互联网集市为您收集整理的将PHP RSA PublicKey转换为Android PublicKey全部内容,希望文章能够帮你解决将PHP RSA PublicKey转换为Android PublicKey所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】