Реализация шифрования Java RSA и AES

#java #android #cryptography #aes #rsa

Вопрос:

У меня был этот код на python

Шифрование RSA

 from Crypto.PublicKey import RSA 
from Crypto.Cipher import PKCS1_OAEP
import base64

def rsa_encrypt(pempubkey,plain_text): 
       rsaPublicKey = PKCS1_OAEP.new(RSA.importKey(pempubkey)) 
       cipher_text = rsaPublicKey.encrypt(plain_text)
       return base64.b64encode(cipher_text)

plain_text = "This is the RSA 2048bit key enctypted text"
pempubkey = open("publicKey.pem").read() 
b64_cipher_text = rsa_encrypt(pempubkey,plain_text)
print "Cipher text (Base64 string):",b64_cipher_text
 

Шифрование AES

 from Crypto.Cipher import AES,PKCS1_OAEP 
from Crypto import Random
import base64

def pkcs7Padding(data):
        length = 16 - (len(data) % 16)
        data  = chr(length)*length
        return data

def aes_encrypt(plain_text,key,iv):
      plain_text = pkcs7Padding(plain_text)
      cipher = AES.new(key, AES.MODE_CBC, iv) 
      cipher_text = cipher.encrypt(plain_text) 
      b64_cipher_text = base64.b64encode(cipher_text) 
      return b64_cipher_text

key = Random.new().read(32);
iv = Random.new().read(AES.block_size)
data = "This string was AES-256 / CBC / PKCS Padding encrypted."

cipher_text = aes_encrypt(data,key,iv)
print cipher_text
 

Я пытаюсь реализовать то же самое в Java, как показано ниже

 public class CryptoHandler {
    private static final String RSA_PUBLIC_KEY     = "this is the rsa public key";
    private static final String TRANSFORMATION_AES = "AES/CBC/PKCS7Padding";
    private static final String TRANSFORMATION_RSA = "RSA/None/OAEPPadding";
    private static final String ALGORITHM_AES      = "AES";
    private static final String ALGORITHM_RSA      = "RSA";

    @Nullable
    public static String encryptUsingAES(String 32charKey, String 16charIV, String data) {
        try {
            byte[] srcBuff = data.getBytes();
            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), ALGORITHM_AES);
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
            Cipher cipher = Cipher.getInstance(TRANSFORMATION_AES);
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
            cipher.getBlockSize();
            byte[] dstBuff = cipher.doFinal(srcBuff);
            return Base64.toBase64String(dstBuff);
        } catch (Exception exception) {
            Logger.logException(exception);
        }
        return null;
    }

    @Nullable
    public static String encryptUsingRSA(String data) {
        try {
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(RSA_PUBLIC_KEY.getBytes()));
            KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM_RSA);
            RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(keySpec);
            Cipher cipher = Cipher.getInstance(TRANSFORMATION_RSA);
            cipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey);
            byte[] result = cipher.doFinal(data.getBytes());
            return Base64.toBase64String(result);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
 

Я пытаюсь запустить оба кода, но получаю разные результаты. Чего не хватает в моем java-коде?

Примечание: Я работаю на стороне клиента, поэтому у меня нет закрытого ключа, моя сторона заключается в шифровании данных и отправке на сервер для расшифровки

Комментарии:

1. Пожалуйста, отформатируйте код правильно и разумно.

2. @PresidentJamesK. Полк, я отформатировал код

3. @Topaco я отформатировал код и обнаружил, что RSA выдает другой вывод

4. @Topaco как я уже упоминал, у меня нет закрытого ключа, есть только открытый ключ. так что моя сторона не может его расшифровать

5. @Topaco У меня была отладка с моим парнем из ios. Быстрый PH/fpV6rpm8PnLJPjRZ9FWyEOKerQrrAChPPgnIGznSJVgqKUA3TiUl5X2w0eKuA0p /AF0siGmdwgEl4YkKGJNKx0P02JMfsXm1neWRP fY6BPhDVnq0wogCWy/W1GPAaES 1C0gaOnXw 73PzgOY cD2UCvxeiAcT0p4 lpQD1Oduz7qIYqVgzZm5K4dmKfKTNMcL9uU7QNrkHIFD6N1GdcvRUVvsZVQlPUTxD11U7jE/0ZGO1xwIbQwNWznduyHLigPNy2 NOagufPNHBp/IcAfR6FKyemu/7HGU0LaGDrUhyxpc0IssNPqzVT8ksfU9RhADYWsLuXC28VU gl mUKOGKTW8fea2zaEdO2xs3FChD36e8CA6X4cuf9br1tIjj7Uk7CSjTwxFZfMf2A==