18910140161

java 与 php aes 加解密处理

顺晟科技

2022-09-15 12:38:49

295

java aes 加密的数据使用php aes 解密。php aes 加密的数据使用java解密.

java 代码中使用的加密模式: AES/CBC/PKCS5Padding
秘钥长度: 128
以及使用 SHA1PRNG 做秘钥处理.

请教下载php中如何实现.最好使用 openssl

java 代码如下:

@Slf4j
public class DefaultKeyService implements KeyService {

    private static final String SECURE_RANDOM_ALGORITHM = "SHA1PRNG";

    private static final String AES = "AES";

    private static final String AES_TRANSFORMATION = "AES/CBC/PKCS5Padding";

    private static final Integer AES_KEY_LENGTH = 128;

    private static final String RSA_TRANSFORMATION = "RSA/ECB/PKCS1Padding";

    private static final String RSA_SIGN_ALGORITHMS = "SHA512WithRSA";


    @SneakyThrows
    @Override
    public byte[] generateAesKey() {
        KeyGenerator generator = KeyGenerator.getInstance("AES");
        generator.init(AES_KEY_LENGTH, SecureRandom.getInstance(SECURE_RANDOM_ALGORITHM));
        SecretKey key = generator.generateKey();
        return key.getEncoded();
    }

    @SneakyThrows
    @Override
    public byte[] aesEncrypt(byte[] key, byte[] plaintext) {
        SecureRandom secureRandom = SecureRandom.getInstance(SECURE_RANDOM_ALGORITHM);
        secureRandom.setSeed(key);
        KeyGenerator kgen = KeyGenerator.getInstance(AES);
        kgen.init(AES_KEY_LENGTH, secureRandom);

        SecretKeySpec secretKeySpec = new SecretKeySpec(kgen.generateKey().getEncoded(), AES);

        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        IvParameterSpec iv = new IvParameterSpec(key);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);

        return cipher.doFinal(plaintext);
    }

    @SneakyThrows
    @Override
    public byte[] aesDecrypt(byte[] key, byte[] ciphertext) {
        SecureRandom secureRandom = SecureRandom.getInstance(SECURE_RANDOM_ALGORITHM);
        secureRandom.setSeed(key);
        KeyGenerator kgen = KeyGenerator.getInstance(AES);
        kgen.init(AES_KEY_LENGTH, secureRandom);

        SecretKeySpec secretKeySpec = new SecretKeySpec(kgen.generateKey().getEncoded(), AES);

        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        IvParameterSpec iv = new IvParameterSpec(key);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
        return cipher.doFinal(ciphertext);
    }
}

测试代码如下:

    @Test
    public void test() {
        DefaultKeyService service = new DefaultKeyService();
        System.out.println(new String(service.generateAesKey()));

        byte[] key = service.generateAesKey();
        byte[] c = service.aesEncrypt(key, "hello".getBytes(StandardCharsets.UTF_8));
        System.out.println(Base64.getEncoder().encodeToString(c));

        byte[] p = service.aesDecrypt(key, c);
        System.out.println(new String(p));
    }
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航