我正在开发一款安卓应用程序,希望用户能够使用其他人的公钥加密消息。系统将生成公/私钥对,然后可以秘密地向其他用户发送消息。
我正在创建一个加密类来处理消息的加密/解密。不幸的是,我遇到了一些问题。
在这种方法中,我想传递用户的私钥以及他们想要加密的消息。我希望用户自定义私钥(例如“我的秘密密码”)。
public static void lock(String secret, String textToEncrypt) {
try {
//Convert the public key string into a key
byte[] encodedPublicKey = Base64.decode(secret.getBytes("utf-8"),Base64.DEFAULT);
X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedPublicKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publickey = keyFactory.generatePublic(spec); //Crash Here
PrivateKey privateKey = keyFactory.generatePrivate(spec);
//Encrypt Message
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publickey);
byte[] encryptedBytes = cipher.doFinal(textToEncrypt.getBytes());
Log.d(TAG,"Encrypted: "+new String(encryptedBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
异常情况如下:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0740b0:ASN.1 encoding routines:ASN1_get_object:TOO_LONG
我在这里缺失了什么?我是否忽略了一些显而易见的东西或者我没有理解这些工具的工作方式?我以前使用这个 JavaScript 库进行公钥/私钥加密,现在正在尝试做类似的事情。如果有人能指点我正确的方向,我将不胜感激 :)