永发信息网

怎么才能让AES解密在不同的jdk下通用

答案:2  悬赏:0  手机版
解决时间 2021-04-02 21:11
  • 提问者网友:王者佥
  • 2021-04-02 07:38
怎么才能让AES解密在不同的jdk下通用
最佳答案
  • 五星知识达人网友:woshuo
  • 2021-04-02 09:11
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.*;
import javax.crypto.spec.*;


public class AES {

static final String algorithmStr="AES/ECB/PKCS5Padding";

static private KeyGenerator keyGen;

static private Cipher cipher;

static boolean isInited=false;

//初始化
static private void init()
{

//初始化keyGen
try {
keyGen=KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
keyGen.init(128);

//初始化cipher
try {
cipher=Cipher.getInstance(algorithmStr);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

isInited=true;
}

public static byte[] GenKey()
{
if(!isInited)//没初始化,则初始化
{
init();
}
return keyGen.generateKey().getEncoded();
}

public static byte[] Encrypt(byte[] content,byte[] keyBytes)
{
byte[] encryptedText=null;

if(!isInited)//初始化
{
init();
}

Key key=new SecretKeySpec(keyBytes,"AES");

try {
cipher.init(Cipher.ENCRYPT_MODE, key);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
encryptedText=cipher.doFinal(content);
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return encryptedText;
}

//解密byte[]
public static byte[] DecryptToBytes(byte[] content,byte[] keyBytes)
{
byte[] originBytes=null;
if(!isInited)
{
init();
}

Key key=new SecretKeySpec(keyBytes,"AES");

try {
cipher.init(Cipher.DECRYPT_MODE, key);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//解密
try {
originBytes=cipher.doFinal(content);
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return originBytes;
}
}
全部回答
  • 1楼网友:鱼忧
  • 2021-04-02 10:37
AES本身通用算, 能Base64编码候字符串编码格式才导致相同(UTF-8, GBK)编码
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯