将通过SMS发送的字符串转换为android中的RSA公钥/私钥

时间:2013-11-28 07:55:19

标签: android encryption

我已经工作了好几天但没有成功,我在使用RSA加密在android中进行短信加密,问题是如何将String转换为公钥并将其用于加密,我是发送publicKey通过短信转换成字符串,但我无法取回密钥。

这就是我的算法的工作方式,但当我通过Sms发送“puk”作为字符串并进行加密时,它不再起作用了!请帮助我。 。

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

public static void generateKey() throws Exception
{
 KeyPairGenerator gen = KeyPairGenerator.getInstance(RSA);
 gen.initialize(128, new SecureRandom());
 KeyPair keyPair = gen.generateKeyPair();
 uk = keyPair.getPublic();
 rk = keyPair.getPrivate();
 puk = uk.toString();
}

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{
  String text =  new String(decrypt(hex2byte(data.getBytes())));
  return text+" OK";
 }
 catch (Exception e)
 {
     return "Error: "+e;
 }

}

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;
}

0 个答案:

没有答案