回答

收藏

Lua与Java计算的AES加密结果不一致12金钱.anslist{background:url(source/p

技术问答 技术问答 476 人阅读 | 0 人回复 | 2023-09-11

背景:java端有一套现成的代码,现在需要迁移到lua。  Q" Q% Y' x+ P% W
测试时:使用的key为同一个
key = "1938703285589872452";1.java加密代码
pom

    ) y# X5 r" f' m0 k. @) C" o
  •         <dependency>" N! v1 k; m+ w% z
  •             <groupId>org.bouncycastle</groupId>
    , L6 n7 `2 K/ t0 R& y  B- m1 U8 L
  •             <artifactId>bcprov-jdk15on</artifactId>
    . f/ e9 J! E, D1 w0 [: q+ q3 O. R
  •             <version>1.55</version>
    3 r' k( @- K2 n" A
  •         </dependency>$ G1 w- }8 i& o7 a- q6 H

  • " D) X. J4 E, ^- s  V2 C
  •         <dependency>1 O3 B- a# w# ~6 a9 o7 v
  •             <groupId>org.bouncycastle</groupId>9 l; t( U1 S; ^( S. G% D# H
  •             <artifactId>bcpkix-jdk15on</artifactId>
    # j0 S/ Z3 d) S4 D" ?, W' k% l8 k
  •             <version>1.55</version>; g; z1 ^: H! u7 f! q# v
  •         </dependency>
    ( z$ ]2 ]: T. U) G
  • 9 @# P5 N! t' ^# C" ]. E. M& t8 i% `
  •         <dependency>
    # E+ y9 x2 Y6 d) u* t5 K5 G6 B4 E
  •             <groupId>commons-codec</groupId>" E  @2 V7 E, h0 s5 @1 {# e, ~& f
  •             <artifactId>commons-codec</artifactId>. f" d+ W( B  K6 h- a6 g  ^
  •             <version>1.10</version>        </dependency>
    1 d! {5 D6 o* G. S

; k' d. x# L/ V; T
代码

    - ]6 o- X) A+ d3 `
  • import org.apache.commons.codec.binary.Base64;
    - R2 [' f1 N. |: _9 K3 H9 {1 U
  • import org.bouncycastle.crypto.engines.AESEngine;; q& d# ]9 }; d, b+ O8 k
  • import org.bouncycastle.crypto.modes.CBCBlockCipher;& W2 f) n5 f% j/ W3 f/ z7 q
  • import org.bouncycastle.crypto.paddings.PKCS7Padding;: R2 b  A1 t1 f! x) J- L) W: W
  • import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
    9 Y4 q/ @. u! W' [
  • import org.bouncycastle.crypto.params.KeyParameter;. Z. W0 \% N* K/ E! o( s

  • . _$ A/ ?; u; Y4 J$ A* C4 B
  • import java.nio.ByteBuffer;
    " o0 P' |5 g1 t9 y4 n
  • import java.nio.charset.StandardCharsets;7 h0 a/ k2 k1 F- r# L! E

  • ; w# t# A7 R, m! C
  • // ...
    0 s! l; f4 O3 A. z7 G

  • ) ~; t5 L8 U& |- h/ f
  • // 加密方法
    - U/ W/ ?# \. t  p/ n5 r
  •     public static String encryptWithBC(String data, String key) throws Exception {5 @4 z/ `0 V& m! m
  •         // key
    ; t4 w' E( S2 g5 X
  •         ByteBuffer keyBuffer = ByteBuffer.allocate(32);
    . y# r- [- n: ?5 Y3 d( H0 t6 m
  •         keyBuffer.put(key.getBytes());' ~2 H: ~0 O3 P* ^
  •         KeyParameter keyParameter = new KeyParameter(keyBuffer.array());+ m6 ?+ ~* D  o0 s  }* P- p
  •         // 请求数据
    # O' e4 b) ]& i0 D9 i
  •         byte[] dataByteArr = data.getBytes(StandardCharsets.UTF_8);2 f3 r; e, @) r

  • 7 {& Y' ^; _5 X! M
  •         // init9 F7 z, I4 O. `1 C! }) K
  •         CBCBlockCipher aes = new CBCBlockCipher(new AESEngine());
    4 n3 ~) J, x+ O- B% }' E9 P
  •         PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(aes, new PKCS7Padding());
    % [9 W0 [5 T1 G1 @& |
  •         cipher.init(true, keyParameter);
    . M2 [$ @8 B0 E2 ]+ C

  • , S" u9 Z6 S2 @/ e  w* [
  •         byte[] output = new byte[cipher.getOutputSize(dataByteArr.length)];  V. C; D9 s; J/ e  d9 @
  •         int len = cipher.processBytes(dataByteArr, 0, dataByteArr.length, output, 0);
    , s. _9 r- P8 d$ ?  j; h# n
  •         cipher.doFinal(output, len);' m- D. \% c  y/ I6 |( s

  • ; Z! Y1 r) m7 L# u8 x
  •         return Base64.encodeBase64String(output);    }
    " [8 G+ m3 ^/ S  }# R
% y' g( X/ R+ f2 \
2.lua的加密代码
    * T1 v$ Z3 K9 y0 E% ~, v
  • -- AES加密& F3 S$ R! v- v) o7 p
  • local aes = require &quot;resty.aes&quot;
    , z. s7 A" p  @& o/ K% i6 I
  • 7 K9 O6 w3 U' _# g* V9 q
  • -- ...
    6 W( G. w# I2 L7 S5 ^8 s
  • : {8 \) O. A2 P* T
  • -- 加密方法
    1 v: ?$ x9 Y3 P+ K1 K
  • function _M.encrypt_128_cbc_pkcs7(en_data, aes_key)) Z' Z; A1 J/ @, a: Q
  •     --local aes_256_cbc_with_padding = aes:new(key, nil, aes.cipher(256,&quot;cbc&quot;), {iv = string.sub(key, 1, 16)}, nil, nil, enable_padding)
    4 ?7 B& {7 M! _$ P& Q0 c
  •     local aes_128_cbc_pkcs7 = aes:new(aes_key, nil, aes.cipher(128, &quot;cbc&quot;), nil, nil, nil, &quotKCS7&quot;)7 |* M+ P' g! }
  •     local encrypted = aes_128_cbc_pkcs7:encrypt(en_data)
    $ g, J2 y7 u- q: d% l( H$ U
  •     -- 转base641 Z( ^7 }) A  \- ~  @- _0 d( K' ]; K" w
  •     local encrypted_base64 = wkg_hex_utils.str_to_base64(encrypted)5 r* {+ y6 I2 ]  G- d$ n
  •     local encrypted_hex = wkg_hex_utils.str_to_hex(encrypted_base64)9 J  `$ ^$ K. s: e4 u7 C

  • ! s* M$ J! Z+ w' j7 m
  • + z% H$ c! _  A; J5 N7 A, l
  •     wkg_log_utils.log(&quot;AES加密结果(BASE64): {}&quot;, encrypted_base64)) N  z' y. v" _' H8 e# x: d. r
  •     wkg_log_utils.log(&quot;AES加密结果(Hex): {}&quot;, encrypted_hex)  b9 [' X  N$ `" j" X) \
  •     return encrypted_base64end  f0 L2 V& F1 m  A6 N( O$ E. N4 c
! o7 g" Y8 `1 ?: J
lua是参考的git:
7 v( F# z6 Q8 Y5 y1 J( fhttps://github.com/openresty/..." C$ j0 `+ Q; j/ o7 E5 M! h5 Q
0 G/ f& g; ?5 Q8 `( F) }5 W

我只能看出cbc、pkcs7Padding这几个信息,现在结果值完全对不上。; ?* I: [" B" `4 L3 `( B
8 z# L7 t% D8 D0 s$ K& l
没有方向,还望各位指导一下,谢谢啦。
我知道答案 回答被采纳将会获得12 金钱 已有0人回答

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则