赞
踩
Max.Bai
2019-02
目录
python3 - Java AES 加密实现java中SHA1PRNG 算法
最近和java项目对接遇到AES加密算法,java代码有SecureRandom.getInstance("SHA1PRNG"); python实在找不到对应的方法,C#,php,js代码各种查到,大家都有遇到,解决的不多,C# 直接用java算出key,然后用C#再算AES(https://blog.csdn.net/yunhua_lee/article/details/17226089),耗时差不多2天,最终在php代码中找到方法(https://github.com/myGGT/crypt_aes/blob/master/crypt_aes.php),相关JavaScript代码(https://github.com/bombworm/SHA1PRNG/blob/master/index.js),记录下来给大家使用。
鉴于讨论的人多我在2020-11做一个总结,并写了一个开箱即用的类,可去这篇查看:Python - AES sha1prng 加密解密总结 更新于2020-11
Java 加密参数说明(使用库)
AES加密模式:ECB/CBC/CTR/OFB/CFB
填充:pkcs5padding/pkcs7padding/zeropadding/iso10126/ansix923
数据块:128位/192位/256位
我们就以java默认AES加密方法为例,其他加密模拟基本都是对key的处理一样。Java默认AES加密模式是"AES/ECB/PKCS5Padding"。
java代码:
-
- public static String AES_Encode(String encodeRules,String content){
- try {
- //1.构造密钥生成器,指定为AES算法,不区分大小写
- KeyGenerator keygen=KeyGenerator.getInstance("AES");
- //2.根据ecnodeRules规则初始化密钥生成器
- //生成一个128位的随机源,根据传入的字节数组
- //keygen.init(128, new SecureRandom(encodeRules.getBytes()));
- SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
- secureRandom.setSeed(encodeRules.getBytes());
- keygen.init(128, secureRandom);
- //3.产生原始对称密钥
- SecretKey original_key=keygen.generateKey();
- //4.获得原始对称密钥的字节数组
- byte [] raw=original_key.getEncoded();
- //5.根据字节数组生成AES密钥
- SecretKey key=new SecretKeySpec(raw, "AES");
- //6.根据指定算法AES自成密码器
- Cipher cipher=Cipher.getInstance("AES");
- //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
- cipher.init(Cipher.ENCRYPT_MODE, key);
- //8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
- byte [] byte_encode=content.getBytes("utf-8");
- //9.根据密码器的初始化方式--加密:将数据加密
- byte [] byte_AES=ci
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。