|
背景: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 "resty.aes"
. 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,"cbc"), {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, "cbc"), nil, nil, nil, "
KCS7")
% 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("AES加密结果(BASE64): {}", encrypted_base64)
z0 N" M' ]8 z" s - wkg_log_utils.log("AES加密结果(Hex): {}", 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
|