ユーザーを Django ベースのサーバーにログインさせる Android アプリを作成しようとしています。ユーザー名とパスワードを暗号化してセキュリティを高めようとしていますが、何らかの理由でサーバー側で正しく復号化されていません。
Java暗号化とPyCrypto暗号化がわずかに異なり、互換性の問題を引き起こしていることに関係していると思われますが、何が問題なのか本当にわかりません。
アプリの暗号化コードは次のとおりです(このチュートリアルに従いました):
public String encrypt_rsa(String original) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
Resources res = getResources();
InputStream is = res.openRawResource(R.raw.public_key);
byte[] encodedKey = new byte[is.available()];
is.read(encodedKey);
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey pkPublic = kf.generatePublic(publicKeySpec);
Cipher pkCipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
pkCipher.init(Cipher.ENCRYPT_MODE, pkPublic);
byte[] encryptedInByte = pkCipher.doFinal(original.getBytes());
String encryptedInString = new String(Base64Coder.encode(encryptedInByte));
is.close();
return encryptedInString;
}
そして、これが私のPythonコードです
from Cryto.PublicKey import RSA
def decrypt(encoded_text):
f = open("/path_to_file/private_key.pem", 'r')
priv_key = RSA.importKey(f)
encrypted_text = base64.b64decode(encoded_text)
plain_text = priv_key.decrypt(encrypted_text)
return plain_text
どんな助けでも大歓迎です!