对接项目时,遇到接口转发的问题,java需要使用“AES-CFB-256”加密一个订单,并将数据转发给PHP,同时PHP通过“AES-CFB-256”解密获得原数据:
1.上java的代码
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AesDmUtils {
private static final String transformation="AES/CFB/NoPadding";
/**
* Encrypt
*
* @param key String secret key
* @param value String origin plain text
* @return String base64 encryption data
*/
public static String encrypt(String key, String value) {
try {
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance(transformation);//AES/CFB/NoPadding
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.encodeBase64String(encrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* Decrypt
*
* @param key String secret key
* @param encrypted String base64 encryption data
* @return String decrypted plain text
*/
public static String decrypt(String key, String encrypted) {
try {
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance(transformation);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
2.根据自己的情况对数据加密解密即可,亲测有效
3.感谢
如果觉得写得好,记得收藏哦 ~ (O_O) ~