栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-09

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-09

JAVA AES/ECB/PKCS7Padding 转 python

我这里有个需求,需要将 AES/ECB 加密过的的密文进行解密,我这里也有公钥,由于需要将项目进行对接,所以我选择用python进行解密,但在网上搜索出来发现大都不可用,或者无法运行,我用的的是python3.7
寻求大佬帮助。

另外一种方法是从之前别人写的java 的 AES/ECB 解密代码(试过可以运行成功,并且可以解码成功)我想将它转为python,但发现能力不够,也一直不成功。

下面是公司里别人用java写的解密代码

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;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号