回答

收藏

Lua与Java计算的AES加密结果不一致

Java技术问答 Java技术问答 69 人阅读 | 0 人回复 | 2022-01-02

本帖最后由 java123 于 2022-1-2 21:56 编辑
5 H2 w. f: p: l) m) _1 T
2 M! S$ i1 v; `" I, d
背景:java端有一套现成的代码,现在需要迁移到lua。
$ m" o5 G. f1 ^; b测试时:使用的key为同一个
key = "1938703285589872452";
1.java加密代码
pom
  1.         <dependency>
  2.             <groupId>org.bouncycastle</groupId> 0 h- f" I9 i% }/ r$ x4 z+ m; ^& Y9 |
  3.             <artifactId>bcprov-jdk15on</artifactId>
  4.             <version>1.55</version>
  5.         </dependency>
  6.         <dependency> ; e% W% y; y& J7 c; ?
  7.             <groupId>org.bouncycastle</groupId> : P5 ], I, N! J3 E
  8.             <artifactId>bcpkix-jdk15on</artifactId> + O/ i+ Y2 x8 z' j/ p1 `6 C
  9.             <version>1.55</version>   h  A6 B4 M- Z3 C6 q& o/ g
  10.         </dependency> 7 h! C  b/ E4 N8 R3 @1 m
  11.         <dependency>
  12.             <groupId>commons-codec</groupId> + a  d7 V2 c$ e1 a7 e: c7 z
  13.             <artifactId>commons-codec</artifactId>
  14.             <version>1.10</version>
  15.         </dependency>
复制代码
# O! G; [7 Y+ w; _; N
代码
  1. import org.apache.commons.codec.binary.Base64; ) p2 B! u5 \5 N" y& O( Y5 I, T
  2. import org.bouncycastle.crypto.engines.AESEngine;   w3 J5 }; T( z) {) N/ a
  3. import org.bouncycastle.crypto.modes.CBCBlockCipher; 7 \$ T1 @  g# ~6 p/ Y
  4. import org.bouncycastle.crypto.paddings.PKCS7Padding; ' [. e4 K8 q+ V$ z" W
  5. import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
  6. import org.bouncycastle.crypto.params.KeyParameter;
  7. import java.nio.ByteBuffer;
  8. import java.nio.charset.StandardCharsets;
  9. 7 C8 ~4 h% m+ n2 v
  10. // ...
  11. // 加密方法 4 w6 r! x/ M8 e( t4 B' d1 j  j
  12.     public static String encryptWithBC(String data, String key) throws Exception {
  13.         // key 7 l/ R, _9 f' N% y8 @( N
  14.         ByteBuffer keyBuffer = ByteBuffer.allocate(32); / T1 M/ p% m2 Y
  15.         keyBuffer.put(key.getBytes()); 7 E6 r; F% A& i9 R4 U7 v: u- Z9 b: L1 ^
  16.         KeyParameter keyParameter = new KeyParameter(keyBuffer.array());
  17.         // 请求数据 4 E) w  Q6 |0 L9 w8 l1 u& z% j
  18.         byte[] dataByteArr = data.getBytes(StandardCharsets.UTF_8); 7 \0 H7 j1 F2 G* s( C+ E, D. i, d
  19.         // init
  20.         CBCBlockCipher aes = new CBCBlockCipher(new AESEngine()); : g. |; }0 u. x4 |7 N+ G5 ]' @  A
  21.         PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(aes, new PKCS7Padding());   B9 H" V0 i: `& M: i
  22.         cipher.init(true, keyParameter); 9 T, K6 p( S2 H  R2 j1 h
  23. - r6 |% i/ f: q4 J
  24.         byte[] output = new byte[cipher.getOutputSize(dataByteArr.length)];
  25.         int len = cipher.processBytes(dataByteArr, 0, dataByteArr.length, output, 0);
  26.         cipher.doFinal(output, len); 9 j" |1 S+ H& ~
  27. 6 F% X0 {2 e. T8 y
  28.         return Base64.encodeBase64String(output);
  29.     }
复制代码

" i! W1 |; K& e: H
2.lua的加密代码
  1. -- AES加密 ! W, |4 p$ O4 O
  2. local aes = require "resty.aes"   _8 |( }. k! D4 ?# `3 ~
  3. 9 D, Y: g, G' s+ V: a) T
  4. -- ... 6 t) U2 @: e  Y3 m6 \# k: i6 R* f
  5. -- 加密方法 5 h2 u: M( f9 o  o- J5 Q
  6. function _M.encrypt_128_cbc_pkcs7(en_data, aes_key)
  7.     --local aes_256_cbc_with_padding = aes:new(key, nil, aes.cipher(256,"cbc"), {iv = string.sub(key, 1, 16)}, nil, nil, enable_padding) 5 D; H  V$ B" V2 s1 j
  8.     local aes_128_cbc_pkcs7 = aes:new(aes_key, nil, aes.cipher(128, "cbc"), nil, nil, nil, "PKCS7")
  9.     local encrypted = aes_128_cbc_pkcs7:encrypt(en_data) 5 @/ _% l! n& M( {' e% H
  10.     -- 转base64
  11.     local encrypted_base64 = wkg_hex_utils.str_to_base64(encrypted) $ m$ {7 L8 G- k, t  e( T: F
  12.     local encrypted_hex = wkg_hex_utils.str_to_hex(encrypted_base64)
  13.     wkg_log_utils.log("AES加密结果(BASE64): {}", encrypted_base64) / i' |9 z' E5 G; b
  14.     wkg_log_utils.log("AES加密结果(Hex): {}", encrypted_hex)
  15.     return encrypted_base64
  16. end
复制代码
6 ^; D2 Y5 j0 j
lua是参考的git:
- l; p! P5 z" u3 ~https://github.com/openresty/...
" T0 [2 Z1 K- z& R6 P$ p0 K8 g
/ S* U; O, j3 M' G2 z* C

124.png
我只能看出cbc、pkcs7Padding这几个信息,现在结果值完全对不上。3 z7 p+ N" O# J: y
123.png
5 a6 z: a' R  r2 p7 z
没有方向,还望各位指导一下,谢谢啦。
我知道答案 回答被采纳将会获得12 金钱 已有0人回答
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则