我编码了HMAC解密。我尝试了很多次来解密输出。
这是我的代码
package javaapplication_HMAC;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.sun.org.apache.xml.internal.security.utils.Base64;
import java.util.Formatter;
public class Encryption {
public void Encryption_Base64(String x,String y){
String message = x;
String key = y;
String algorithm = "HmacSHA1";
try {
Mac sha256_hmac = Mac.getInstance(algorithm);
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), algorithm);
sha256_hmac.init(secret_key);
String hash = Base64.encode(sha256_hmac.doFinal(message.getBytes("UTF-8")));
System.out.println(hash);
} catch (NoSuchAlgorithmException | UnsupportedEncodingException | InvalidKeyException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Encryption encryption_base64 = new Encryption();
encryption_base64.Encryption_Base64("test", "123456");
}
}输出为: QFemksWe6HuyDAJIepZd+ldchzc=
有没有可能解密它?
发布于 2018-07-31 04:51:16
TL;DR:不是。
MAC函数也称为“键控散列函数”。它不是任何意义上的“加密”。它将密钥和纯文本转换为身份验证标记。相同的key +纯文本产生相同的标签,此属性用于检查纯文本是否未被修改。
HMAC是一个建立在哈希函数上的MAC,在您的例子中是SHA-256。只要哈希函数没有被破坏,即使您知道密钥,也无法恢复纯文本。
如果只有一小部分可能的纯文本,您当然可以进行暴力攻击,只需尝试每个具有密钥的纯文本,看看标签是否匹配。(如果密钥也是未知的,但是来自一个较小的集合,您也可以尝试所有可能的密钥。)
https://stackoverflow.com/questions/51600957
复制相似问题