回答

收藏

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

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

背景:java端有一套现成的代码,现在需要迁移到lua。
2 _. I# W* Z2 l0 y4 f7 v7 i测试时:使用的key为同一个
key = "1938703285589872452";1.java加密代码
pom

    # n* F6 Y7 B/ H. Z+ `9 t
  •         <dependency>
    + r- z* I4 ?4 J& I. e5 h" O. h
  •             <groupId>org.bouncycastle</groupId>" x/ o) V! u- {! C
  •             <artifactId>bcprov-jdk15on</artifactId>
    7 O7 ~% o  `  |( i, O  ?; `4 c
  •             <version>1.55</version>
    , M: @4 R2 r! W6 ]/ T
  •         </dependency>
    + F4 M, x, Z2 j
  •   X$ K8 t! p& C" N
  •         <dependency>
    , {' o/ ^3 z4 e& v
  •             <groupId>org.bouncycastle</groupId>
    " H- s% D) Z  r. _" ~
  •             <artifactId>bcpkix-jdk15on</artifactId>' c. R, P7 ?0 t$ s/ g. G
  •             <version>1.55</version>2 a( a1 Y& E" P& Q/ o; f
  •         </dependency>  g8 c. g' Z- G; L

  • & v8 M" Y! j9 r% X/ E4 ^
  •         <dependency>2 ^8 j% u; I! O" I
  •             <groupId>commons-codec</groupId>2 F( w, q' t' f( J' f7 |
  •             <artifactId>commons-codec</artifactId>
    5 b" F8 L1 y, F2 ~/ H( }2 r
  •             <version>1.10</version>        </dependency>$ U$ h" ~/ A! F( s" Z, t

& t1 K4 `% E+ f, I5 a/ x
代码

    ( W, @, m' z# ~$ H+ m+ U
  • import org.apache.commons.codec.binary.Base64;6 P( f$ w9 k2 U- y3 P
  • import org.bouncycastle.crypto.engines.AESEngine;
    0 {3 H- {# P' W
  • import org.bouncycastle.crypto.modes.CBCBlockCipher;9 |( k# k9 P; a$ N- D
  • import org.bouncycastle.crypto.paddings.PKCS7Padding;
      J# u0 t' n) K. V/ A. Q6 H3 M
  • import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
    5 U, ~" K$ [, y6 ~" z$ e
  • import org.bouncycastle.crypto.params.KeyParameter;+ i9 B& J8 }5 @) d' F! Z

  • 6 i% u: v! t/ P$ M& w  @5 Z5 M
  • import java.nio.ByteBuffer;
    0 j4 O& |) D  L* ^9 _
  • import java.nio.charset.StandardCharsets;3 u: g& S# |1 h
  • & E; D2 O  K: D6 y( E4 u  H5 C: @3 Y) V
  • // ...
    ( [0 G: i+ Z" e1 B- I

  • ) X: t( H+ v8 k! P6 r% f7 u/ q$ X
  • // 加密方法7 F' i- @4 x3 ?0 [/ f! z5 z, |
  •     public static String encryptWithBC(String data, String key) throws Exception {
    & O3 k: p* }9 x# m0 F# g
  •         // key5 {9 y# |8 \0 Q, B* S
  •         ByteBuffer keyBuffer = ByteBuffer.allocate(32);4 G9 |' \/ X7 s5 n- T# |% u$ F1 m! j
  •         keyBuffer.put(key.getBytes());" T, V3 _# n' ~( a0 U
  •         KeyParameter keyParameter = new KeyParameter(keyBuffer.array());
    0 \' p1 B" N/ t) F  p: O7 t
  •         // 请求数据7 @: i# }8 F" s0 v) {
  •         byte[] dataByteArr = data.getBytes(StandardCharsets.UTF_8);
    ; \. N! E3 @- [
  • 3 {8 W$ W* U% }7 f
  •         // init% m- h. v  U9 v& ]: l
  •         CBCBlockCipher aes = new CBCBlockCipher(new AESEngine());. H# E8 M2 e  b1 Z0 X
  •         PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(aes, new PKCS7Padding());
    ( R! a; ]; J) |
  •         cipher.init(true, keyParameter);: t! c& F6 k/ L- L: B! ~& y6 k" ?3 c

  • - x1 @" D  |& h4 g9 A9 E
  •         byte[] output = new byte[cipher.getOutputSize(dataByteArr.length)];: `: w4 p0 \; c/ X2 N5 x& N( `
  •         int len = cipher.processBytes(dataByteArr, 0, dataByteArr.length, output, 0);$ C& t7 [& J( a8 [5 y0 u  j$ ~
  •         cipher.doFinal(output, len);
    ) `) F* N" @  m# _. F8 c5 ]

  • $ l7 `* d  w% x$ Q- X5 S1 k
  •         return Base64.encodeBase64String(output);    }
    1 `( `/ b5 f, q* @7 a
# j4 J' c, c5 U5 k
2.lua的加密代码
    . L" H- p6 S2 C( |+ Z9 F- D
  • -- AES加密$ c) D4 r0 ~" Q+ R
  • local aes = require &quot;resty.aes&quot;
    . u3 R/ S' H$ @6 T6 h  F

  • 3 t, }3 W1 q3 l* M
  • -- ...( R$ ^2 M# i9 b( k1 c% X. p" L

  • 1 ?# T/ ~( D5 N7 \  A; O+ g6 p
  • -- 加密方法7 f$ D- {8 t. A
  • function _M.encrypt_128_cbc_pkcs7(en_data, aes_key)
    9 }) n5 m. I4 S, q% c
  •     --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)0 P% Z, k  a; q! R: p8 y: s
  •     local aes_128_cbc_pkcs7 = aes:new(aes_key, nil, aes.cipher(128, &quot;cbc&quot;), nil, nil, nil, &quotKCS7&quot;)
    % A6 r: s) C' `, X9 y4 ~: k
  •     local encrypted = aes_128_cbc_pkcs7:encrypt(en_data)+ e: B0 E  }3 }- h7 K( l, M1 ]1 }
  •     -- 转base64. l6 ~8 v- @/ f
  •     local encrypted_base64 = wkg_hex_utils.str_to_base64(encrypted)3 |2 i3 _% y. f6 _4 |6 \
  •     local encrypted_hex = wkg_hex_utils.str_to_hex(encrypted_base64)  P8 Q9 R% ?! j9 e% Z. U+ l
  • 0 l- ]  A+ a( k) [# u' C! m
  • ; p& ^! k3 U$ F5 z
  •     wkg_log_utils.log(&quot;AES加密结果(BASE64): {}&quot;, encrypted_base64)
      z0 N" M' ]8 z" s
  •     wkg_log_utils.log(&quot;AES加密结果(Hex): {}&quot;, encrypted_hex)* R) N1 u3 E: C# W
  •     return encrypted_base64end
    ! x/ {3 |& @8 i- y" ^
' N3 d1 H- L( k
lua是参考的git:8 s# l3 I6 ^9 J  _; }: ]
https://github.com/openresty/...
8 Q, n: q5 A/ H6 g4 m: Q
4 W% ?3 L% {, _1 n

我只能看出cbc、pkcs7Padding这几个信息,现在结果值完全对不上。2 X$ x* C( k2 b$ j5 u
4 C# o9 x9 T4 C1 D0 ?
没有方向,还望各位指导一下,谢谢啦。
我知道答案 回答被采纳将会获得12 金钱 已有0人回答

本帖子中包含更多资源

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

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

本版积分规则