[Android] how to get pem format public key from modulus and exponent

To do this, we need to download 2 jar, which list below:

bouncycastle.openssl + commons-codec-1.10

if you want to compile the app from android source code, you will need to write your own “Android.mk”

package com.example.getpubkey;

import java.io.StringWriter;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.openssl.*;

public class MainActivity extends Activity {

    String key_N = "f22f26ef784475df476e15e3f6595329a7b4f8ad02ffb7c2c8f24baae2c6f5363c0a6f2288935c244d541bfcbfd0fd2382160672d10e8ed362a59661311094f8263810112e4a67d44a07527c514dbd2f4af7f23852645489f191802d96d12f65825a6029eedc8c284bcd2732355bf9848cabe82aef1bb4a60fa7b0e8eb8478fa1dddc36f4eeb6e7e952306e88ebddb593db1b538bde8230a8edc1237575370a8ebc8c3c64588b49397e2cad4b707b4b66515c3bf0f78b6b27dfdf0c28cd5fdc4fc91383681f6ab2f39d524df96c3277ca5d855c890ce331f655ddec5e37c52bf2ad30ec1026b117d5dae899b25b87c5ca23cd005bcc970a3f33605591aeb0755";
    String key_E = "00010001";

    Button btn1 = null;
    static String pubkey = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = (Button)this.findViewById(R.id.btn1);

        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    pubkey = convertPublicKey(key_N,key_E);

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                Log.d("GetPub",pubkey);
            }
        });

    }

    private String convertPublicKey(String modulus, String exponent) throws Exception {
        PublicKey pub;
        StringWriter writer = new StringWriter();

        BigInteger data_N = new BigInteger(Hex.decodeHex(modulus.toCharArray()));
        BigInteger data_E = new BigInteger(Hex.decodeHex(exponent.toCharArray()));

        /* use the N,E to generate the OpensslRSAPublickey */
        RSAPublicKeySpec spec = new RSAPublicKeySpec(data_N, data_E);
        KeyFactory factory = KeyFactory.getInstance("RSA");
        pub = factory.generatePublic(spec);

        /* use the pemwriter to generate the pem format key */
        PEMWriter pemWriter = new PEMWriter(writer);
        pemWriter.writeObject(pub);
        pemWriter.flush();
        pemWriter.close();

        return writer.toString();
    }
}
时间: 2024-12-25 13:55:00

[Android] how to get pem format public key from modulus and exponent的相关文章

The Salt Master has rejected this minion's public key!

salt查看日志: salt --log-level=all "10.199.165.244" state.highstate 进入调试模式: salt-minion -l debug [DEBUG   ] Reading configuration from /etc/salt/minion [DEBUG   ] Configuration file path: /etc/salt/minion [INFO    ] Setting up the Salt Minion "

使用public key来做SSH authentication

public key authentication(公钥认证)是对通过敲用户名.密码方式登录服务器的一种替代办法.这种方法更加安全更具有适应性,但是更难以配置. 传统的密码认证方式中,你通过证明你你知道正确的密码来证明你是你.证明你知道密码的唯一方式是你告诉服务器密码是什么.这意味着如果服务器被黑掉,或者欺骗,那么一个黑客攻击者就能学习到你的密码. Public key authentication(公钥认证)解决了这个问题.你产生一个密钥对,该密钥对由一个public key(公钥)(每个人都

Xshell配置密钥公钥(Public key)与私钥(Private Key)登录

ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法. 使用密钥登录分为3步:1.生成密钥(公钥与私钥):2.放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中:3.配置ssh客户端使用密钥登录. 一.生成密钥公钥(Public key)与私钥(Private Key) 打开Xshell,在菜单栏点击"tools",在弹出的菜单中选择&quo

Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录

ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法. 使用密钥登录分为3步:1.生成密钥(公钥与私钥):2.放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中:3.配置ssh客户端使用密钥登录. 一.生成密钥公钥(Public key)与私钥(Private Key) 打开Xshell,在菜单栏点击"tools",在弹出的菜单中选择&quo

从 ssh private key 中重新生成 public key

Use the -y option to ssh-keygen: ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub From the 'man ssh-keygen' -y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout. 原文地址:https://www.cnblogs.com/pekkle/p/1177

Xshell配置ssh免密码登录-密钥公钥(Public key)

1 简介 ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法. 使用密钥登录分为3步: 1.生成密钥(公钥与私钥): 2.放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中: 3.配置ssh客户端使用密钥登录. 1.1 生成密钥(公钥与私钥) 打开Xshell,在菜单栏点击“工具”,在弹出的菜单中选择“(新建用户密钥生成向导)”,如下图:   弹出“

关于Public key for *.rpm is not installed 的解决方法

今天在用yum 安装httpd的时候出现了一下错误:warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897update/gpgkey                                            | 1.8 kB     00:00 Public key for apr-util-1.2.7-11.el5_5.1.i386.rpm is not installed 在网上找到了

Red Hat Linux使用yum 安装报 关于Public key for *.rpm is not installed 的解决方法

Public key for Cluster_Administration-en-US-5.2-1.noarch.rpm is not installed以上这些是报错信息,在网上搜到了解决方法:此时要导入rpm的签名信息即可以root登录,执行下面命令# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

公钥(Public Key)与私钥(Private Key)

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分.公钥通常用于加密会话密钥.验证数字签名,或加密可以用相应的私钥解密的数据.通过这种算法得到的密钥对能保证在世界范围内是唯一的.使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密.比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功.