我这里有个需求,需要将 AES/ECB 加密过的的密文进行解密,我这里也有公钥,由于需要将项目进行对接,所以我选择用python进行解密,但在网上搜索出来发现大都不可用,或者无法运行
另外一种方法是从之前别人写的java 的 AES/ECB 解密代码(试过可以运行成功,并且可以解码成功)我想将它转为python,但发现能力不够,也一直不成功。
寻求各位帮助。
package com.example.testt;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Base64;
public class AescUtils {
public static String decrypt(String content, String key){
String result = null;
try {
byte[] bytes = decrypt(parseHexStr2Byte(content), key.getBytes());
result = new String(bytes, StandardCharsets.UTF_8);
} catch (Exception e) {
}
return result;
}
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1) {
return null;
}
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);}
return result;
}
public static byte[] decrypt(byte[] content, byte[] key) throws Exception{
// 获取密匙
SecretKey secretKey = generateKey(key);
// 获取 AES 密码器
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
// 初始化密码器(解密模型)
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 返回解密数据
return cipher.doFinal(Base64.getDecoder().decode(content));
}
private static SecretKey generateKey(byte[] key) throws NoSuchAlgorithmException {
KeyGenerator gen = KeyGenerator.getInstance("AES");
//256:密钥生成参数;secure_random:密钥生成器的随机源
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(key);
gen.init(256,secureRandom);
SecretKey secretKey = gen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
secretKey = new SecretKeySpec(enCodeFormat, "AES");
Provider provider= Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
if(provider==null){
provider=new BouncyCastleProvider();
Security.addProvider(provider);
}
return secretKey;
}
}