开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 466|回复: 5
收起左侧

[易语言] 这个是什么算法

[复制链接]
结帖率:89% (151/170)
发表于 2025-1-27 10:12:43 | 显示全部楼层 |阅读模式   安徽省亳州市
14精币
01.png

72 3D 79 5E 3D 6A 6F 59 5D 54 51 76 61 5B 4E 41 5F 64 52 41 5D 54 52 41 5D 54 53 3C 57 54 52 41 5D 54 52 41 5D 55 4E 41 5D 54 51 46 4F 64 76 41 E5 85 85 E5 80 BC E5 AE 9D E7 AE B1

{"recog": 999999999, "msgId": 1031, "param1": 8948825, "param2": 1, "param3": 0, "param4": 1311, "zlib": 0, "len": 12, "times": 86732} |~?i`"Sm


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (105/105)

签到天数: 12 天

发表于 2025-1-27 12:47:09 | 显示全部楼层   浙江省温州市
回复

使用道具 举报

结帖率:96% (24/25)

签到天数: 15 天

发表于 2025-1-27 13:03:05 | 显示全部楼层   河北省唐山市
我转换过来为什么是(r=y^=joY]TQva[NA_dRA]TRA]TS<WTRA]TRA]UNA]TQFOdvA充值宝箱)这个文本。。。可能还需要继续解才能的到你这个json但不会了
回复

使用道具 举报

结帖率:100% (5/5)

签到天数: 7 天

发表于 2025-1-27 14:06:33 | 显示全部楼层   广东省佛山市

关于如何将特定的JSON数据加密成给定的字符串。用户给出的输入是一个JSON对象:


{"recog": 999999999, "msgId": 1031, "param1": 8948825, "param2": 1, "param3": 0, "param4": 1311, "zlib": 0, "len": 12, "times": 86732}

目标是将这个JSON数据加密成字符串:


r=y^=joY]TQva[NA_dRA]TRA]TS<WTRA]TRA]UNA]TQFOdvA

用户提到这是“充值宝箱”相关的,可能涉及某种游戏或应用的充值系统。我需要分析可能的加密方法,并找到如何从输入数据生成目标字符串的步骤。

首先,我需要确定可能的加密方式。常见的加密方法包括对称加密(如AES)、非对称加密(如RSA)、哈希函数(如SHA-256)、Base64编码,或者自定义的编码/加密算法。由于输出字符串包含各种字符(包括字母、符号如^、=、]、<等),这可能不是标准的Base64输出,因为Base64通常只使用字母、数字和+、/符号。但有时候会有变种,比如URL安全的Base64使用-和_代替+和/。不过用户提供的字符串中有其他符号,比如^、=、]、<等,这可能意味着不是简单的Base64编码。

接下来,观察输入和输出的长度。输入的JSON数据转换为字符串后的长度可能较长,而输出字符串的长度为:

r=y^=joY]TQva[NA_dRA]TRA]TS

数一下字符数,假设没有省略的话,可能需要具体数数。例如,从"r=y^=joY]TQva[NA_dRA]TRA]TS

用户提供的JSON中包含多个参数,如recog、msgId、param1到param4、zlib、len、times等。可能这些参数需要被序列化后加密,或者按照某种特定格式排列再进行加密。

可能的步骤:

  1. 参数序列化:将JSON中的各个参数按照一定顺序排列,可能转换成某种二进制格式或特定字符串格式。例如,将各个数值转换为十六进制、十进制字符串拼接,或者按照固定长度填充后进行拼接。

  2. 加密算法应用:可能使用对称加密算法,如AES,或者异或(XOR)加密,或者自定义的替换/置换算法。例如,每个字节与某个密钥进行XOR操作,再进行Base64或其他编码。

  3. 编码转换:将加密后的二进制数据转换为可打印字符,可能使用Base64、Base85、或者其他自定义的编码表。例如,将每个字节映射到特定的字符集,比如ASCII中的某些字符。

另外,用户提供的示例输出中包含“r=y^=”这样的前缀,可能表示某种标识或版本号,或者加密后的结果包含头部信息。例如,“r=y^=”可能对应固定的部分,后面的部分才是加密后的数据。

需要具体分析示例输入和输出之间的关系。例如,尝试将输入参数转换为某种格式,再观察是否与输出有关联。例如,各个参数的数值是否在加密后的字符串中以某种形式存在。

例如,param1是8948825,转换为十六进制是88 88 59(因为 8948825 ÷ 16^5 = 816^5=81048576=8388608,余下8948825-8388608=560217;继续计算后续的十六进制),不过这可能比较复杂。或者,将这些数值转换为字节序列,再进行加密处理。

另一个可能性是使用zlib压缩,因为JSON中有一个zlib参数为0,可能表示是否启用压缩。但此处zlib=0,可能未启用压缩,所以数据未压缩直接加密。

另外,参数中的“len”为12,可能表示加密后的数据长度,但输出字符串明显超过12个字符,所以可能需要进一步分析。

或者,加密后的数据长度是12字节,然后通过某种编码转换为更长的字符串。例如,每3字节转换为4个Base64字符,12字节对应16个Base64字符,但用户提供的输出字符串更长,所以可能不是这种情况。

另一种可能性是各个参数被单独处理,然后拼接起来。例如,msgId=1031转换为某种编码,param1=8948825转换为另一种编码,然后所有结果拼接在一起。

或者,整个JSON被转换为特定的二进制结构,例如将所有数字按大端或小端排列,形成字节流,然后进行加密和编码。

需要进一步分析示例中的加密结果是否包含这些参数的某些特征。例如,观察“joY]TQva[NA_dRA]TRA]TS

例如,可能每个参数被转换为特定长度的字符串,再组合。例如,recog=999999999,转换为十六进制是3B9AC9FF,对应的ASCII字符可能为';’ ‘š’ ‘É’ ‘ÿ’,但这些字符可能不可打印,所以可能用其他方式编码。

另一个思路是,查看加密后的字符串是否包含某些模式。例如,重复出现的“TRA]”可能对应某些固定的数值或结构。例如,如果某个参数在加密后生成了“TRA]”这样的字符串,可能该参数的值在多个位置重复出现,或者加密算法中存在重复的密钥或块加密模式。

此外,用户提到的“充值宝箱”可能意味着这是某个游戏或应用中的特定加密方式,可能与服务器通信时的数据加密相关。这种情况下,可能需要了解该应用的具体加密方式,可能使用已知的算法或自定义算法。

由于用户提供的输入和输出是唯一的例子,可能需要通过逆向工程或猜测可能的加密步骤。例如:

  1. 将各个参数转换为字节流。

  2. 应用某种加密算法(如XOR)和密钥。

  3. 将结果转换为可打印字符,可能使用Base85或其他编码。

例如,假设将JSON中的数值按照某种顺序转换为字节,比如按参数名的顺序排列,每个数值转换为4字节或8字节的整数(大端或小端),形成字节流,然后进行加密。

例如,参数按顺序排列:recog (4字节,但999999999是0x3B9AC9FF,所以4字节),msgId(1031=0x0407,2字节),param1(8948825=0x88 88 59,可能需要4字节),param2=1(4字节),param3=0,param4=1311(0x051F),zlib=0,len=12,times=86732(0x152CC)。将这些数值按大端排列为字节序列,可能形成类似:

3B 9A C9 FF 04 07 00 88 88 59 00 00 00 01 00 00 00 00 05 1F 00 00 00 00 00 0C 00 01 52 CC

然后,这个字节流可能经过加密处理,如XOR某个密钥,再进行Base64或其他编码。

假设使用XOR加密,每个字节与一个密钥字节异或。例如,密钥可能是一个重复的字符串,如“key”,依次循环异或每个字节。

例如,假设密钥是“abc”,则第一个字节与'a'(0x61)异或,第二个与'b'(0x62),第三个与'c'(0x63),第四个再与'a'异或,依此类推。

但需要验证这种假设是否可行。例如,将示例中的加密字符串进行Base85解码或其他解码,得到字节流,再尝试用可能的密钥异或,看是否能得到有意义的原始数据。

例如,目标字符串是“r=y^=joY]TQva[NA_dRA]TRA]TS

假设将“joY]TQva[NA_dRA]TRA]TS

例如,尝试使用Base85解码工具对加密后的字符串进行处理。例如,截取“joY]TQva[NA_dRA]TRA]TS

joY]TQva[NA_dRA]TRA]TS

从j开始到A结束,逐个计算:joY]TQva[NA_dRA]TRA]TS

另一种可能性是使用自定义的编码表,将字节转换为特定的字符。例如,每个字节被映射到一个特定的字符,如0对应'A',1对应'B',或者更复杂的映射。

此外,用户提供的输出字符串中的某些部分可能对应参数的值。例如,param1=8948825,可能在加密后的字符串中以某种形式出现。例如,8948825的十六进制是88 88 59,可能在加密后的字符串中有对应的字符。

例如,十六进制88的ASCII码是 0x88,在扩展ASCII中是存在但不可打印的。但如果经过XOR加密,可能变为可打印字符。例如,0x88 XOR 0xAB = 0x23('#'),但需要猜测密钥。

由于缺乏更多的例子,可能需要假设某种加密算法。例如,假设每个字符是通过将原始数据的每个字节经过某种变换得到的,比如简单的位移或替换。

另一个思路是,查看加密字符串中的字符是否属于某个特定的字符集。例如,可能使用了URL安全的Base64编码,或者某些符号被替换。例如,标准Base64中的'+'和'/'被替换为'-'和'_',但用户字符串中包含']'、'^'、'='等,可能不是这种情况。

或者,可能使用了类似ROT13的替换,但通常ROT13只影响字母,而这里的字符包括符号,所以可能性较低。

此外,用户提供的加密结果中包含等号'=',这可能表示填充字符,如在Base64中,等号用于填充。但用户字符串中有多个等号,可能分布在不同的位置,例如开头的“r=y^=”中的等号可能不是填充,而是其他含义。

可能需要将整个字符串分段处理。例如,“r=y^=”作为前缀,后面是实际加密数据。假设前缀是固定的,后面的是加密后的数据。

例如,假设实际加密数据部分是“joY]TQva[NA_dRA]TRA]TS

例如,使用Python的base64模块尝试解码:

假设去掉前缀“r=y^=”,取后面的部分:

data = "joY]TQva[NA_dRA]TRA]TS

尝试用Base64解码:

import base64

decoded = base64.b64decode(data)

可能会抛出错误,因为字符']'和'<'不在Base64的字符集中。同样尝试使用Base85:

比如,使用Python的base64.a85decode函数:

但需要先确定是否使用ASCII85编码,该编码通常以<~开头,以~>结束,但用户的数据中没有这些符号,可能不是。

或者,尝试使用其他编码方式,如Base64的URL安全变种,但同样字符不符。

另一种可能性是,字符串中的每个字符是通过将原始字节加上某个偏移量得到的。例如,每个字节加上32,使其变为可打印的ASCII字符。例如,0x00变为空格(0x20),但这种方法可能不适用于所有情况。

或者,使用十六进制表示,但显然加密后的字符串长度不符,因为原始数据字节数较多的话,十六进制会是两倍长度。

例如,假设原始数据有12字节(根据参数len=12),则十六进制表示是24字符,而用户提供的加密字符串后面部分可能超过这个长度,所以可能不是。

回到参数len=12,可能表示加密后的数据长度是12字节,但实际加密后的字符串编码后的长度更长。例如,12字节用Base64编码为16字符(12*8/6=16),但用户提供的字符串后面部分超过这个长度,可能len参数指其他含义,如原始数据的长度。

或者,len=12可能是指加密前的数据长度,比如12字节,加密后可能变成更长的字节,再进行编码。

此时,可能需要构造一个12字节的数据,并尝试不同的加密和编码方式,看是否能得到类似的字符串。

例如,假设原始数据是12字节,经过加密后得到若干字节,再编码为字符串。例如,加密后的数据是24字节,用Base64编码得到32字符(24*8/6=32),但用户示例中的加密字符串后面部分有更多字符,可能需要其他方式。

另一个思路是,将各个参数转换为固定长度的字段,例如每个参数用4字节表示,然后拼接起来。例如:

recog: 999999999 → 4字节(0x3B 9A C9 FF)

msgId: 1031 → 2字节(0x04 0x07),可能需要填充到4字节,如0x00 0x00 0x04 0x07)

param1: 8948825 → 4字节(0x88 88 59 00?或者正确的转换为0x0088 8859,即十进制的8948825是0x88 88 59)

但需要准确转换。例如,8948825 in hex:

8948825 ÷ 16 = 559301 余 9 → 最后一位是9

559301 ÷ 16 = 34956 余 5 → 下一位是5

34956 ÷ 16 = 2184 余 12 → C

2184 ÷ 16 = 136 余 8 → 8

136 ÷ 16 = 8 余 8 → 8

8 ÷ 16 = 0 余 8 → 8

所以,8948825的十六进制是0x88 88 C5 9,但需要确认是否正确。或者使用计算器:8948825的十六进制是88 88 59?可能计算错误,需要准确计算。或者使用Python:

hex(8948825)

'0x88a859'

所以是0x88 A8 59,即三个字节。作为4字节的整数,可能是00 88 A8 59(大端)或者59 A8 88 00(小端)。

假设将每个参数转换为4字节大端排列,那么参数如下:

recog: 999,999,999 → 0x3B9AC9FF → 4字节:3B 9A C9 FF

msgId: 1031 → 0x00000407 → 00 00 04 07

param1: 8,948,825 → 0x88A859 → 补零为00 88 A8 59

param2: 1 → 0x00000001 → 00 00 00 01

param3: 0 → 00 00 00 00

param4: 1311 → 0x0000051F → 00 00 05 1F

zlib: 0 → 00 00 00 00

len: 12 → 0x0000000C → 00 00 00 0C

times: 86732 → 0x000152CC → 00 01 52 CC

将这些字节拼接起来,总长度为:4+4+4+4+4+4+4+4+4 = 9*4=36字节?

或者,参数顺序可能不同,或者某些参数是2字节。例如,msgId可能是2字节,param1是4字节,param2是4字节,等等。

假设参数按照JSON中的顺序排列,每个字段按4字节大端排列:

recog: 4字节 → 3B9AC9FF

msgId: 可能作为4字节,即1031 → 00000407

param1: 4字节 → 0088A859(因为8,948,825 = 0x88A859,补一个零字节)

param2: 4字节 → 00000001

param3: 4字节 → 00000000

param4: 4字节 → 0000051F

zlib: 4字节 → 00000000

len: 4字节 → 0000000C

times: 4字节 → 000152CC

总共有9个字段,每个4字节,共36字节。这个36字节的数据可能被加密,然后编码为字符串。

接下来,假设使用某种加密算法,如AES-ECB或AES-CBC,或者简单的XOR。

例如,如果使用XOR加密,每个字节与一个固定的密钥字节异或。例如,密钥为单字节0xAB,那么每个字节异或0xAB。
例如,第一个字节0x3B异或0xAB = 0x90(即十进制的144),对应的ASCII字符为'�'(不可打印),但用户提供的加密字符串中的字符都是可打印的,所以可能需要另一种处理方式,如异或后再进行Base64编码。

或者,使用多字节循环异或。例如,密钥是“KEY”循环使用,每个字节依次异或K、E、Y、K、E、Y等。



参考下吧,deepseek
回复

使用道具 举报

结帖率:50% (2/4)

签到天数: 18 天

发表于 2025-1-27 16:43:09 | 显示全部楼层   福建省厦门市
你用的什么工具解的~
回复

使用道具 举报

签到天数: 2 天

发表于 2025-1-28 01:59:18 | 显示全部楼层   江苏省徐州市
回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表