Javax 加密 - AESCrypt.java 中的内在候选

Javax Crypto - Intrinsic Candidate in AESCrypt.java

提问人:schegga_BC 提问时间:10/19/2023 更新时间:10/19/2023 访问量:41

问:

假设我正在使用 javax.crypto 的 AES 加密,如下所示:

byte[] plaintext = Files.readAllBytes(...);
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
byte[] iv = new byte[] {
                   (byte)0xF0, (byte)0xF1, (byte)0xF2, (byte)0xF3, (byte)0xF4, (byte)0xF5, (byte)0xF6, (byte)0xF7,
                   (byte)0xF8, (byte)0xF9, (byte)0xFA, (byte)0xFB, (byte)0xFC, (byte)0xFD, (byte)0xFE, (byte)0xFF
               };
IvParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "SunJCE");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
encryptedJavax = cipher.doFinal(plaintext);

我确保 java 使用 SunJCE 提供程序来实现 AES 加密和 CTR 模式。 可以在此处找到 JavaJDK 的最新代码版本: 对于 AES-Encrypion:AES-Crypt.java 和 CTR 模式:CounterMode.javaCipher.getInstance("AES/CTR/NoPadding", "SunJCE");

让我们看看AES-Crypt.java。真正的块加密是通过这个函数实现的:

// Encryption operation. Possibly replaced with a compiler intrinsic.
    @IntrinsicCandidate
    private void implEncryptBlock(byte[] in, int inOffset,
                                  byte[] out, int outOffset)
...

是否可以检查此函数是否在运行时被替换,就像我在第一个代码示例中所示的那样? 这个IntrinsicCandidate有什么作用?在哪里可以找到实现? 我想在运行 init-function 时查找用于加密的代码,以便将其与另一个实现进行比较。cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

与 CTR 模式相同:

 // Implementation of crpyt() method. Possibly replaced with a compiler intrinsic.
    @IntrinsicCandidate
    private int implCrypt(byte[] in, int inOff, int len, byte[] out, int outOff)

此方法用于 CTR 模式,但可能会被替换。我还想看看当我运行 init-Method 时它是否真的被替换了。

Java 加密 AES 内部函数

评论


答: 暂无答案