JS与Python AES解密代码转换时如何解决Base64解码错误?

js与python aes解密代码转换及错误排查

本文将针对一段javascript aes解密代码转换到python过程中遇到的错误进行分析和解决。原代码使用node.js的crypto库进行aes-128-cbc解密,而转换后的python代码则使用pycryptodome库。

javascript代码如下:

const crypto = require('crypto')function m(e) {    return crypto.createhash('md5').update(e).digest()}let o = 'ydsecret://query/key/b*rgygvywfnbwpmbazg*wt7sioup2t0c9whmzn39j^dadazhanxvgccy6vyfwnhl'let n = 'ydsecret://query/iv/c@lze2yzhtz2cygaxksvfsb7y4qwhjitppz0nqp87fbej!iv6v^6fvi2wn@bypj4'function decode(t) {    if(!t)        return null;    const a = buffer.alloc(16, m(o))        , r = buffer.alloc(16, m(n))        , i = crypto.createdecipheriv('aes-128-cbc', a, r);    let s = i.update(t, 'base64', 'utf-8');    return s += i.final('utf-8'),    s}let t = 'z21kd9zk1ke6ugku2ccwu4n6elnvodt0yggi0y3g-v0b9syqg8l9d6uernozyohqnydl2efznym6trc_xs-zktftk4hb6jp8xwcznh0avc8qitquiiu_4wkkxjlipvmvfkvjaazzax6vetpkr2fdkfot_jgbm2grsvj3r40autidlimeng8hc0zh4ww7utwutt3oo_zpxg0bsq9wepsab75-chkigkf9htipecl2bl84sbd1xdffczpkkqhecyss0jloxoqp2ltavxrrg58hp1q5uigzz_oo2-jmd-t1r4es40drcaq5bjms62m2vjf8d6ojtoh9jtfnwgzd3cxyn-pd7-tghmynejekfxtayxzpjlfqtrcyde3szuylenkqsl8wrra1hm-1ntfib-blcwadrbynnpp5_54aq_-gbsq8bb_9yex5ovzdb4_ry_spvvuunb39iplmhcdcnjod3ngiidbl9suz-9npjbx05zyrdpmfpal424qdoaxevqnvoh8jqfpzvqahmzu4mjg0sicdwfh7gp1zqgrbxd3esjt_ibinl3gict2xvuhh_nubcelktec6xbqedrqkpunmpzxjhjcvslhtcmsw0s9f0445ho9kt2qzydmbc3fs0oahputfu77gzpqn7sgiqh8vlixicutfvvop-1c-vu5qjfubln2-s5por9fgyg6rt6ioe_pgmwwj-cc00zum7fybfarktr4d3rk57r72qpxn4ja86zscammdg-m5z31rqh_v7echj8kna3go3ywkck4vtswowrfhis5rtz6ekrgc3skfkbb5vp8wop_84mybtgnbmj4cczhtq2hcoxrjf4def6ydt2ubxyv4btvgx9yx3ub4gx0ik5kyvfma6b_lnkrwk331wjuxkqtbgyiuwkr8j5qtvbmirvaa7aa19z4xmieaqbcuq5p4i9fcelthbrjd9yocouhk4u27xxywjjxcjotvzg7zwtiv76fhdeqlgawvjj7ww4nfgjhqc6aka_2afxa4c_lavvzgfukl3xscl7pfkxp6ghjcgkesrr80pt1gffw2xi8x4ejjnm_prsuz'console.log(decode(t))

对应的python代码如下:

import hashlibfrom Crypto.Cipher import AESimport base64def m(e):    return hashlib.md5(e.encode()).digest()def decode(t):    if not t:        return None    o = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'    n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'    a = m(o)    r = m(n)    i = AES.new(a, AES.MODE_CBC, r)    s = i.decrypt(base64.b64decode(t)).decode('utf-8')    return st = 'Z21kD9ZK1ke6ugku2ccWu4n6eLnvoDT0YgGi0y3g-v0B9sYqg8L9D6UERNozYOHqnYdl2efZNyM6Trc_xS-zKtfTK4hb6JP8XwCzNh0avc8qItQUiIU_4wKKXJlIpvMvfKvJaaZzaX6VEtpkr2FdkfoT_Jgbm2GRSVj3r40autIdlImENG8hC0ZH4ww7utwuTt3Oo_ZpXg0BSq9wePSAB75-ChkiGKF9HTIPeCl2bl84SBD1XDfFCZpkKQhecYSs0JLoXOqP2ltavxRrg58Hp1q5uIgZZ_Oo2-Jmd-t1r4es40drcAq5bjmS62M2VJF8D6ojtOh9JTfNwgzD3CxYn-Pd7-TgHMyNEJEkFXTAyxzpjlFqtrCYDE3SZUYlENkqsL8Wrra1hM-1nTfiB-BLcWAdRBynNpP5_54aq_-GBsq8bB_9yEX5ovzDB4_Ry_spVVuUnb39iplMHCdCnjOD3ngiIDbl9SUz-9npjBX05ZYRdPmFPAl424qdoaxeVqnVoH8jQFPZVqaHMzu4mJg0SICDWFH7GP1zqGRbXd3ESjT_iBInl3gICt2XVuhh_nubcELkTEC6xbqEDRQkPUNMpzXJHjcvsLHtcmSW0S9F0445ho9kT2qZYdMBC3Fs0OaHpUtFu77gZpQn7sGiqh8VliXIcUtfvvop-1c-Vu5QjfUbLn2-s5POR9fGYG6rt6ioe_PGmwWj-Cc00zUM7FybfarKTr4D3Rk57R72qpXN4Ja86ZsCAMmDG-m5z31RQh_V7echJ8Kna3Go3yWKCK4vtSwOWrFhiS5RTz6EkrGc3SkFKbb5vp8Wop_84myBtgnBmj4CczhTq2HcOxrJf4def6yDt2uBxyv4bTVGx9Yx3uB4Gx0iK5kYvfma6B_LnkRWk331wjuXKQtBGYIuWkR8J5QtvBmIRVaa7AA19Z4xMIEAqbcuQ5p4I9FCElthBrJd9YOcouHK4U27xxYWJJXcJoTvzG7zWtiV76fHDeQLgAWvJJ7ww4NFgjhqc6AKA_2afxa4c_lAvVZgFuKL3XSCL7PfKxp6GhjcGKeSRr80PT1gfFw2xi8X4ejjNm_prsUZ'print(decode(t))

python代码运行报错:binascii.error: invalid base64-encoded string: number of data characters (1053) cannot be 1 more than a multiple of 4。这是因为传入的t字符串并非标准的base64编码字符串,其长度为1053,不是4的倍数。 需要检查t字符串的来源和编码方式。 确保t是正确的base64编码字符串后再进行解码。

立即学习“Python免费学习笔记(深入)”;

以上就是JS与Python AES解密代码转换时如何解决Base64解码错误?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1359477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 22:45:53
下一篇 2025年12月13日 22:46:07

相关推荐

发表回复

登录后才能评论
关注微信