java - CTR 模式下的 AES 解密 (Java)

标签 java cryptography aes encryption

我有这些信息:

点击率键:36f18357be​​4dbd77f050515c73fcf9f2

CTR密文1:69dda8455c7dd4254bf353b773304eec0ec7702330098ce7f7520d1cbbb20fc3\ 88d1b0adb5054dbd7370849dbf0b88d393f252e764f1f5f7ad97ef79d59ce29f5f51eeca32eabedd9afa9329

请注意,16 字节的加密 IV 是随机选择的,并添加到密文之前。文本在 CTR 模式下使用 AES 加密。

我必须发现明文 为此,我编写了一个简短的 Java 程序,但它不起作用,我也找不到原因:/

这是Java程序

import java.nio.charset.Charset;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AES {

/**
 * @param args
 */
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub

    //Dernier exemple CTR mode
    //Clé 16 bits 
    byte[] keyBytes = new byte[] { (byte)0x36,(byte)0xf1,(byte)0x83,(byte)0x57,(byte)0xbe,(byte)0x4d,(byte)0xbd,(byte)0x77,(byte)0xf0,(byte)0x50,(byte)0x51,(byte)0x5c,0x73,(byte)0xfc,(byte)0xf9,(byte)0xf2};
    //IV 16 bits (préfixe du cipherText)
    byte[] ivBytes = new byte[] {(byte)0x69,(byte)0xdd,(byte)0xa8,(byte)0x45,(byte)0x5c,(byte)0x7d,(byte)0xd4,(byte)0x25,(byte)0x4b,(byte)0xf3,(byte)0x53,(byte)0xb7,(byte)0x73,(byte)0x30,(byte)0x4e,(byte)0xec};

    //Initialisation
    SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);

    //Mode
    Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");

    byte[]  cipherText = new byte[] {(byte)0x0e,(byte)0xc,(byte)0x77,(byte)0x02,(byte)0x33,(byte)0x00,(byte)0x98,(byte)0xce,(byte)0x7f,(byte)0x75,(byte)0x20,(byte)0xd1,(byte)0xcb,(byte)0xbb,(byte)0x20,(byte)0xfc,(byte)0x38,(byte)0x8d,(byte)0x1b,(byte)0x0a,(byte)0xdb,(byte)0x50,(byte)0x54,(byte)0xdb,(byte)0xd7,(byte)0x37,(byte)0x08,(byte)0x49,(byte)0xdb,(byte)0xf0,(byte)0xb8,(byte)0x8d,(byte)0x39,(byte)0x3f,(byte)0x25,(byte)0x2e,(byte)0x76,(byte)0x4f,(byte)0x1f,(byte)0x5f,(byte)0x7a,(byte)0xd9,(byte)0x7e,(byte)0xf7,(byte)0x9d,(byte)0x59,(byte)0xce,(byte)0x29,(byte)0xf5,(byte)0xf5,(byte)0x1e,(byte)0xec,(byte)0xa3,(byte)0x2e,(byte)0xab,(byte)0xed,(byte)0xd9,(byte)0xaf,(byte)0xa9,(byte)0x32,(byte)0x29}; 
    cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);  
    byte [] original = cipher.doFinal(cipherText);
    String plaintext = new String(original);
    System.out.println("plaintext: " + plaintext );
}

结果是 => 明文:CŸUnfpL¨KH¹)VPÅ|ÉÒ9}FÅgÿ žQ3Š®¹zÛ∼ˆ±<þãh¤ÔÆÈ“M±§|@+0H5§ 所以好像不对

提前谢谢你:)

最佳答案

可能还有其他问题,但是您问题中的密文,在第一个 16 个字节之后,以 0ec770 开头,而 Java 代码中的密文以

0x0e, 0xc, 0x77

它们不匹配。

关于java - CTR 模式下的 AES 解密 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659795/

相关文章:

java - 单击并下载文件后的 URL 重定向

java - SlowAES加密和java解密

java - 使用 java 从 MySQL 检索多个 Blob

aes - crypto-js 从十六进制解密

c++ - 英特尔® TinyCrypt : how to use AES-128/CTR

Java 使用 AES 256 和 128 对称 key 加密

java - 如何提取分支决策的 boolean 值?

java - 当除非条件不满足时,Spring缓存值不会被更新

java - 如何在 Java 中使用三态复选框/TreeItem?

java - 如何添加字母以产生字母表中的另一个字母?