package com.huawei.secure.android.common.encrypt.rsa; import android.text.TextUtils; import android.util.Base64; import com.huawei.secure.android.common.encrypt.utils.EncryptUtil; import com.huawei.secure.android.common.encrypt.utils.b; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; public abstract class RSAEncrypt { private static final String a = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"; private static final String b = "RSAEncrypt"; private static final String c = "UTF-8"; private static final String d = ""; private static final int e = 2048; private static final String f = "RSA"; public static String decrypt(String str, String str2) { if (!TextUtils.isEmpty(str) && !TextUtils.isEmpty(str2)) { return decrypt(str, EncryptUtil.getPrivateKey(str2)); } b.b(b, "content or private key is null"); return ""; } public static String encrypt(String str, String str2) { if (!TextUtils.isEmpty(str) && !TextUtils.isEmpty(str2)) { return encrypt(str, EncryptUtil.getPublicKey(str2)); } b.b(b, "content or public key is null"); return ""; } public static Map<String, Key> generateRSAKeyPair(int i) throws NoSuchAlgorithmException { HashMap hashMap = new HashMap(2); if (i < e) { b.b(b, "generateRSAKeyPair: key length is too short"); return hashMap; } SecureRandom genSecureRandom = EncryptUtil.genSecureRandom(); KeyPairGenerator instance = KeyPairGenerator.getInstance(f); instance.initialize(i, genSecureRandom); KeyPair generateKeyPair = instance.generateKeyPair(); PublicKey publicKey = generateKeyPair.getPublic(); PrivateKey privateKey = generateKeyPair.getPrivate(); hashMap.put("publicKey", publicKey); hashMap.put("privateKey", privateKey); return hashMap; } public static boolean isPrivateKeyLengthRight(RSAPrivateKey rSAPrivateKey) { return rSAPrivateKey != null && rSAPrivateKey.getModulus().bitLength() >= e; } public static boolean isPublicKeyLengthRight(RSAPublicKey rSAPublicKey) { return rSAPublicKey != null && rSAPublicKey.getModulus().bitLength() >= e; } public static String decrypt(String str, PrivateKey privateKey) { if (TextUtils.isEmpty(str) || privateKey == null || !isPrivateKeyLengthRight((RSAPrivateKey) privateKey)) { b.b(b, "content or privateKey is null , or length is too short"); return ""; } try { return new String(decrypt(Base64.decode(str, 0), privateKey), c); } catch (UnsupportedEncodingException e2) { b.b(b, "RSA decrypt exception : " + e2.getMessage()); return ""; } catch (Exception e3) { b.b(b, "exception : " + e3.getMessage()); return ""; } } public static String encrypt(String str, PublicKey publicKey) { if (TextUtils.isEmpty(str) || publicKey == null || !isPublicKeyLengthRight((RSAPublicKey) publicKey)) { b.b(b, "content or PublicKey is null , or length is too short"); return ""; } try { return Base64.encodeToString(encrypt(str.getBytes(c), publicKey), 0); } catch (UnsupportedEncodingException unused) { b.b(b, "encrypt: UnsupportedEncodingException"); return ""; } catch (Exception e2) { b.b(b, "exception : " + e2.getMessage()); return ""; } } public static byte[] decrypt(byte[] bArr, PrivateKey privateKey) { byte[] bArr2 = new byte[0]; if (bArr == null || privateKey == null || !isPrivateKeyLengthRight((RSAPrivateKey) privateKey)) { b.b(b, "content or privateKey is null , or length is too short"); return bArr2; } try { Cipher instance = Cipher.getInstance(a); instance.init(2, privateKey); return instance.doFinal(bArr); } catch (GeneralSecurityException e2) { b.b(b, "RSA decrypt exception : " + e2.getMessage()); return bArr2; } } public static byte[] encrypt(byte[] bArr, PublicKey publicKey) { byte[] bArr2 = new byte[0]; if (bArr == null || publicKey == null || !isPublicKeyLengthRight((RSAPublicKey) publicKey)) { b.b(b, "content or PublicKey is null , or length is too short"); return bArr2; } try { Cipher instance = Cipher.getInstance(a); instance.init(1, publicKey); return instance.doFinal(bArr); } catch (GeneralSecurityException e2) { b.b(b, "RSA encrypt exception : " + e2.getMessage()); return bArr2; } } }