【问题标题】:Android RSA encryption and Python decryptionAndroid RSA加密和Python解密
【发布时间】:2013-09-06 11:50:36
【问题描述】:

我正在尝试制作一个将用户登录到基于 Django 的服务器的 Android 应用程序。我试图通过加密用户名和密码来提高安全性,但由于某种原因,它没有在服务器端正确解密。

我怀疑这与 Java 加密和 PyCrypto 加密略有不同并导致兼容性问题有关,但我太不懂事了,不知道出了什么问题。

这是应用程序上的加密代码(遵循this 教程):

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

任何帮助将不胜感激!

【问题讨论】:

  • 它没有正确解密不是一个很有帮助的错误描述......

标签: java android python encryption pycrypto


【解决方案1】:

Java 代码使用 PKCS#1 v1.5 RSA 加密,这是一个严重损坏且不安全的协议。

话虽如此,解密是在 Python 中使用适当的模块完成的:

from Crypto.Cipher import PKCS1_v1_5

priv_key = RSA.importKey(f)
cipher = PKCS1_v1_5.new(priv_key)
plain_text = cipher.decrypt(encrypted_text)

更多信息,请参阅the module documentation。

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多