Android 安卓:如何更改公钥和私钥?

Android 安卓:如何更改公钥和私钥?,android,encryption,rsa,public-key-encryption,Android,Encryption,Rsa,Public Key Encryption,我想创建一个简单的RSA加密程序,我找到了这个教程。我想知道我是否有可能预先定义公钥和私钥的值,以便 公钥:您好 私钥:再见 MainActivity.java public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { try {

我想创建一个简单的RSA加密程序,我找到了这个教程。我想知道我是否有可能预先定义公钥和私钥的值,以便

公钥:您好

私钥:再见

MainActivity.java

public class MainActivity extends Activity {

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
    try {
        generateKey();
    } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Button enButton=(Button)findViewById(R.id.enbutton);
    final Button deButton=(Button)findViewById(R.id.debutton);
    final EditText input=(EditText)findViewById(R.id.input);
    final EditText Raw=(EditText)findViewById(R.id.raw);
    final EditText output=(EditText)findViewById(R.id.originText);
    enButton.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {
            try {
                Raw.setText(encrypt(input.getText().toString()));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        };
    });
    deButton.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {
            try {
                output.setText(String.valueOf(decrypt(Raw.getText().toString())));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

private final static String RSA = "RSA";
public static PublicKey uk;
public static PrivateKey rk;

public static void generateKey() throws Exception
{
    KeyPairGenerator gen = KeyPairGenerator.getInstance(RSA);
    gen.initialize(512, new SecureRandom());
    KeyPair keyPair = gen.generateKeyPair();
    uk = keyPair.getPublic();
    rk = keyPair.getPrivate();
}
private static byte[] encrypt(String text, PublicKey pubRSA) throws Exception
{
    Cipher cipher = Cipher.getInstance(RSA);
    cipher.init(Cipher.ENCRYPT_MODE, pubRSA);
    return cipher.doFinal(text.getBytes());
}
public final static String encrypt(String text)
{
    try {
        return byte2hex(encrypt(text, uk));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

public final static String decrypt(String data)
{
    try{
        return new String(decrypt(hex2byte(data.getBytes())));
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

private static byte[] decrypt(byte[] src) throws Exception
{
    Cipher cipher = Cipher.getInstance(RSA);
    cipher.init(Cipher.DECRYPT_MODE, rk);
    return cipher.doFinal(src);
}

public static String byte2hex(byte[] b)
{
    String hs = "";
    String stmp = "";
    for (int n = 0; n < b.length; n ++)
    {
        stmp = Integer.toHexString(b[n] & 0xFF);
        if (stmp.length() == 1)
            hs += ("0" + stmp);
        else
            hs += stmp;
    }
    return hs.toUpperCase();
}

public static byte[] hex2byte(byte[] b)
{
    if ((b.length % 2) != 0)
        throw new IllegalArgumentException("hello");

    byte[] b2 = new byte[b.length / 2];

    for (int n = 0; n < b.length; n += 2)
    {
        String item = new String(b, n, 2);
        b2[n/2] = (byte)Integer.parseInt(item, 16);
    }
    return b2;
}
}
公共类MainActivity扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
试一试{
generateKey();
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终按钮enButton=(按钮)findViewById(R.id.enButton);
最终按钮去毛刺=(按钮)findViewById(R.id.去毛刺);
最终EditText输入=(EditText)findViewById(R.id.input);
最终EditText原始=(EditText)findViewById(R.id.Raw);
最终EditText输出=(EditText)findViewById(R.id.originText);
setOnClickListener(新的OnClickListener()
{
公共void onClick(视图v)
{
试一试{
saw.setText(加密(input.getText().toString());
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
};
});
deButton.setOnClickListener(新的OnClickListener()
{
公共void onClick(视图v)
{
试一试{
output.setText(String.valueOf(decrypt(Raw.getText().toString()));
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
});
}
私有最终静态字符串RSA=“RSA”;
公共静态公钥;
公共静态私钥;
public static void generateKey()引发异常
{
KeyPairGenerator gen=KeyPairGenerator.getInstance(RSA);
gen.initialize(512,新的SecureRandom());
KeyPair KeyPair=gen.generateKeyPair();
uk=keyPair.getPublic();
rk=keyPair.getPrivate();
}
私有静态字节[]加密(字符串文本、公钥pubRSA)引发异常
{
Cipher Cipher=Cipher.getInstance(RSA);
cipher.init(cipher.ENCRYPT_模式,publirsa);
返回cipher.doFinal(text.getBytes());
}
公共最终静态字符串加密(字符串文本)
{
试一试{
返回字节2hex(加密(文本,英国));
}
捕获(例外e)
{
e、 printStackTrace();
}
返回null;
}
公共最终静态字符串解密(字符串数据)
{
试一试{
返回新字符串(解密(hex2byte(data.getBytes()));
}
捕获(例外e)
{
e、 printStackTrace();
}
返回null;
}
私有静态字节[]解密(字节[]src)引发异常
{
Cipher Cipher=Cipher.getInstance(RSA);
cipher.init(cipher.DECRYPT_模式,rk);
返回cipher.doFinal(src);
}
公共静态字符串字节2hex(字节[]b)
{
字符串hs=“”;
字符串stmp=“”;
对于(int n=0;n
你的问题我一点也不懂。你能澄清你的问题吗,以及它与你发布的代码的关系吗?@JamesKPolk很抱歉这么晚才回复。我正在尝试根据提供的信息对用户进行身份验证。例如,密码中的用户密钥(公钥)和安全应答(私钥)。我将使用公钥加密一条消息,比如说“成功”,使用正确的私钥,我将能够检索回消息“成功”。