我试着用java7实现AES-256-GCM解码,我在GCM中遇到了mac检查失败的响应,请帮帮我,谢谢大家。
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public static void main(String[] args) throws Exception {
String iv = "35d117c42d1c1835420b6b9942dd4f1b"; // utf-8
String key = "3a7bd3e2360a3d29eea436fcfb7e44c7"; // utf-8
String hexCipherString = "07a604fc0c143a6e"; // hex
String hexAuthTagString = "984e81176ff260717beb184db3d73753"; //hex
byte[] decodedCipherHexBtye = Hex.decodeHex(hexCipherString.toCharArray());
byte[] base64Cipher = Base64.decodeBase64(decodedCipherHexBtye);
byte[] decodedAuthTagHex = Hex.decodeHex(hexAuthTagString.toCharArray());
byte[] base64AuthTag = Base64.decodeBase64(decodedAuthTagHex);
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
byte[] gcmIv = iv.getBytes("UTF-8");
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");
GCMParameterSpec params = new GCMParameterSpec(base64AuthTag.length * Byte.SIZE, gcmIv);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, params);
cipher.updateAAD(base64AuthTag);
byte[] result = cipher.doFinal(base64Cipher);
System.out.println(Base64.encodeBase64(result));
}
我很期待Base64Encode的预期结果:DGVZDA==
如何处理安全警告注释以实现安全代码。
警告中的核心问题是每次加密都需要随机生成的IV(一组真正随机的字节)
当您制作密码时,这里是一个使用Java8Oracle SE的具体示例
val cipher = Cipher.getInstance("some scheme", "some provider");
至少在Oracle Java8中,这很容易,
用上面的密码
cipher.getIV()
密码对象的实例方法是安全的(请参阅
ivParams = IvParameterSpec( cipher.getIV())
cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);
tag到底是什么意思?我们为什么需要它?
这是一个错误: 1.JS
我得到了一个错误: 不支持的密码算法(AES-256-GCM)(运行时错误) 但我似乎有所有的要求: $openssl enc-help 2>&1 grep gcm -AES-128-ECB-AES-128-GCM-AES-128-OFB -AES-192-ECB-AES-192-GCM-AES-192-OFB -AES-256-ECB-AES-256-GCM-AES-256-OFB Ruby解释
节点模块: Java类:主要方法现在只是用于测试,稍后将被删除。
我希望有帮助,因为我不知道为什么我的AES-GCM实现中断了文件编码。 我有一个API使用1函数用AES-256-GCM加密/解密。(key=32个随机字节的缓冲区) 下面是函数: 使用这段代码,我对结果进行加密并写入文件: 最后,我解密并将内容写入一个文件:
我有以下java代码用于加密纯文本: