私は RSA 暗号化を使用して Android アプリケーションに取り組んでいます。
サーバー、秘密鍵、友人の公開鍵から取得できます。
秘密鍵は次のようになります。
{"n":"...","d":"...","p":"...","q":"...","dmp1":"...","dmq1":"...","coeff":"..."} (jsbn json format)
modulus => n
public exponent => e
private exponent => d
prime1 => p
prime2 => q
exponent1 => dmp1
exponent2 => dmq1
coefficient => coeff
このキーを使用して、サーバーから受信し、JavaScript ライブラリ (SJCL) によって既に暗号化されているメッセージを復号化する必要があります。また、javascrypt ライブラリを使用してメッセージを復号化できるようにするには、メッセージを暗号化する必要があります。
今のところ、私はこれを行いました:
public static String decrypt (String data, String stringKey) throws Exception {
JSONObject jsonKey = new JSONObject(stringKey);
BigInteger n = new BigInteger(Base64.decode(jsonKey.getString("n"), Base64.DEFAULT));
BigInteger e = new BigInteger("10001");
BigInteger d = new BigInteger(Base64.decode(jsonKey.getString("d"), Base64.DEFAULT));
BigInteger p = new BigInteger(Base64.decode(jsonKey.getString("p"), Base64.DEFAULT));
BigInteger q = new BigInteger(Base64.decode(jsonKey.getString("q"), Base64.DEFAULT));
BigInteger dmp1 = new BigInteger(Base64.decode(jsonKey.getString("dmp1"), Base64.DEFAULT));
BigInteger dmq1 = new BigInteger(Base64.decode(jsonKey.getString("dmq1"), Base64.DEFAULT));
BigInteger coeff = new BigInteger(Base64.decode(jsonKey.getString("coeff"), Base64.DEFAULT));
KeySpec privateKeySpec = new RSAPrivateCrtKeySpec(n, e, d, p, q, dmp1, dmq1, coeff);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] dec = cipher.doFinal(data.getBytes());
return new String(Base64.decode(dec, Base64.DEFAULT));
}
今、私はこれを取得します:
javax.crypto.IllegalBlockSizeException: 入力は 96 バイト未満でなければなりません