开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 756|回复: 14
收起左侧

[易语言纯源码] pcvx ccd 00000003算法

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式   海南省东方市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 minivis 于 2026-2-12 22:59 编辑

PC微信CCD 00000003加密算法过程中使用了一个固定的key
o1BI3{j_tayE5u+G

先填充对齐16字节大小
  
子程序名返回值类型公开备 注
填充对齐字节集 
参数名类 型参考可空数组备 注
in_data字节集
变量名类 型静态数组备 注
len整数型 
补位整数型 
ret_data字节集 
i整数型 
补位字节集字节集 
补位字节字节集 
len = 取字节集长度 (in_data)
补位 = 16 - len % 16
判断 (补位 ≠ 16)
补位字节 = 到字节集 (到字节 (补位))
计次循环首 (补位, i)
补位字节集 = 补位字节集 + 补位字节
计次循环尾 ()
ret_data = in_data + 补位字节集

ret_data = in_data

获取需要加密的轮数

  
子程序名返回值类型公开备 注
get_rounds整数型 
参数名类 型参考可空数组备 注
data字节集
变量名类 型静态数组备 注
len整数型 
rounds整数型 
len = 取字节集长度 (data)
rounds = len ÷ 16
返回 (rounds)

然后每轮操作加密16字节大小数据
第一轮 将初始key 与 输入数据 xor, 后续每轮用 上一轮加密后的数据与 下一轮输入数据xor
  
子程序名返回值类型公开备 注
异或一轮_128bit字节集 
参数名类 型参考可空数组备 注
round_data字节集
key_or_beforeround_data字节集
变量名类 型静态数组备 注
i整数型 
tmp_byte整数型 
data_byte字节集 
key_byte字节集 
tmp_bytes字节集 
data_int整数型 
key_int整数型 
' 调试输出 (到十六_加空格 (round_data), 到十六_加空格 (key_or_beforeround_data))
计次循环首 (16, i)
data_byte = 取字节集中间 (round_data, i, 1)
key_byte = 取字节集中间 (key_or_beforeround_data, i, 1)
data_int = 字节集_到整数 (data_byte)
key_int = 字节集_到整数 (key_byte)
' 调试输出 (data_int, key_int)
tmp_byte = 位异或 (data_int, key_int)
tmp_bytes = tmp_bytes + 到字节集 (到字节 (tmp_byte))
计次循环尾 ()
返回 (tmp_bytes)


然后矩阵重排列
  
子程序名返回值类型公开备 注
矩阵排列字节集 
参数名类 型参考可空数组备 注
data字节集
变量名类 型静态数组备 注
ret_data字节集 
View字节集4,4
i整数型 
ii整数型 
计次循环首 (4, i)
计次循环首 (4, ii)
View [ii] [i]取字节集中间 (data, ii + 4 (i - 1), 1)
计次循环尾 ()
计次循环尾 ()
计次循环首 (4, i)
计次循环首 (4, ii)
ret_data = ret_data + View [i] [ii]
计次循环尾 ()
计次循环尾 ()
返回 (ret_data)


再开始循环9次 加密处理本轮数据

先 行移位
  
[/i][/i]
[i][i].版本 2
子程序名返回值类型公开备 注
行移位字节集 ShiftRows
参数名类 型参考可空数组备 注
data字节集
变量名类 型静态数组备 注
row1字节集 
row2字节集 
row3字节集 
row4字节集 
new_row2字节集 
new_row3字节集 
new_row4字节集 
row1 = 取字节集中间 (data, 1, 4)
row2 = 取字节集中间 (data, 5, 4)
row3 = 取字节集中间 (data, 9, 4)
row4 = 取字节集中间 (data, 13, 4)
new_row2 = 取字节集中间 (row2, 2, 3)取字节集中间 (row2, 1, 1)
new_row3 = 取字节集中间 (row3, 3, 2)取字节集中间 (row3, 1, 2)
new_row4 = 取字节集中间 (row4, 4, 1)取字节集中间 (row4, 1, 3)
返回 (row1 + new_row2 + new_row3 + new_row4)


列混合 每次 T-table 偏移+0x4000 大小
返回0x40 大小数据

InvShiftRows_InvSubBytes


9次加密后 最后一轮的处理
行移位

查表替换

矩阵重排列

下一轮数据加密

如此便完成了对ccd zlib的加密(00000003算法)

核心代码
  
子程序名返回值类型公开备 注
ccd_00000003_encrypt文本型 
参数名类 型参考可空数组备 注
in_data文本型
key文本型
变量名类 型静态数组备 注
ori_data字节集 
ret_data文本型 
tmp_data字节集 
rounds整数型 
i整数型 
xor_data字节集 
key_or_beforedata字节集 
hex文本型 
bursts_arrgs字节集 
row_chgx字节集 
mix_col字节集 
out_addr整数型 
const_addr整数型 
out_bytes字节集 
const_bytes字节集 
len整数型 
n整数型 
const_addr_now整数型 
null整数型 
hex_all文本型 
ori_data = 字节集_十六进制到字节集 (删全部空 (in_data))
ori_data = 填充对齐 (ori_data)
rounds = get_rounds (ori_data)
调试输出 (“[需要循环加密的轮数]”, rounds)
key_or_beforedata = 到字节集 (key)
out_addr = 申请内存 (4096, )
计次循环首 (rounds, i)
tmp_data = 取字节集中间 (ori_data, (i - 1) × 16 + 1, 16)
' 调试输出 (“[本次数据]”, 十六进制_添加空格 (字节集_字节集到十六进制 (tmp_data)))
' 调试输出 (“[本次密钥]”, 十六进制_添加空格 (字节集_字节集到十六进制 (key_or_beforedata)))
xor_data = 异或一轮_128bit (tmp_data, key_or_beforedata)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (xor_data))
' 调试输出 (“[异或一轮]”, hex)
' 调试输出 (到文本 (i) + “ 轮xor 完成 ----------------------------------------------------------”)
bursts_arrgs = 矩阵排列 (xor_data)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (bursts_arrgs))
' 调试输出 (“[矩阵排列后]”, hex)
' 17 CA 4A 52 AD 05 E0 92 A1 91 BA 9B F1 0B C8 0E
计次循环首 (9, n)
' 调试输出 (到文本 (n) + “ 轮开始 ----------------------------------------------------------”)
row_chgx = 行移位 (bursts_arrgs)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (row_chgx))
' 调试输出 (到文本 (n) + “ [行移位] 1”, hex)  ' 17 CA 4A 52 05 E0 92 AD BA 9B A1 91 0E F1 0B C8
const_bytes = 字节集_十六进制到字节集 (删全部空 (到文本 ( #t_table_txt )))
len = 取字节集长度 (const_bytes)
const_addr = 申请内存 (len, )
内存.写字节集 (-1, const_addr, const_bytes)
const_addr_now = const_addr + 进制_十六到十 (“4000”) (n - 1)
微信列混合算法 (out_addr, 取变量数据地址 (row_chgx), const_addr_now)
out_bytes = 指针到字节集 (out_addr, 64)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (out_bytes))
调试输出 (到文本 (n)“ [列混合后] 2”, hex)
' 释放内存 (const_addr)
' InvShiftRows_InvSubBytes
const_bytes = 字节集_十六进制到字节集 (删全部空 (到文本 ( #s_box_txt )))
len = 取字节集长度 (const_bytes)
const_addr = 申请内存 (len, )
内存.写字节集 (-1, const_addr, const_bytes)
const_addr_now = const_addr + 进制_十六到十 (“3000”) (n - 1)
hex = 微信_InvShiftRows_InvSubBytes算法 (取变量数据地址 (row_chgx), out_addr, const_addr_now)
' 调试输出 (“3 [轮密钥加后]”, hex)
bursts_arrgs = 字节集_十六进制到字节集 (删全部空 (hex))
' 释放内存 (const_addr)
计次循环尾 ()
' 调试输出 (“[9轮组合算法后]”, hex)
row_chgx = 行移位 (bursts_arrgs)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (row_chgx))
' 调试输出 (“[行移位]”, hex)
const_bytes = 字节集_十六进制到字节集 (删全部空 (到文本 ( #轮密钥常量 )))
const_addr = 申请内存 (取字节集长度 (const_bytes), )
内存.写字节集 (-1, const_addr, const_bytes)
hex = 微信_查表替换 (null, 取变量数据地址 (row_chgx), const_addr)
bursts_arrgs = 字节集_十六进制到字节集 (删全部空 (hex))
' 调试输出 (“[查表替换]”, hex)
bursts_arrgs = 矩阵排列 (bursts_arrgs)
hex = 十六进制_添加空格 (字节集_字节集到十六进制 (bursts_arrgs))
' 调试输出 (“[矩阵排列]”, hex)
key_or_beforedata = bursts_arrgs
hex_all = hex_all + hex
调试输出 (到文本 (i)“/”到文本 (rounds)“ ” + hex)
' 跳出循环 ()
计次循环尾 ()
返回 (hex_all)


i支持库列表   支持库注释   
spec特殊功能支持库

测试数据:
输入zlib 数据
78 9C AD 58 7D 6C 13 E7 19 CF C5 D8 86 23 9B 0A

输出
77 36 C3 1C 38 A0 78 CB 82 F1 EA 87 46 C5 56 B3

验证一致




ccd_加密算法.zip

756.94 KB, 下载次数: 10, 下载积分: 精币 -2 枚


签到天数: 10 天

发表于 4 天前 | 显示全部楼层   河南省安阳市
看看怎么样
回复 支持 反对

使用道具 举报

签到天数: 17 天

发表于 4 天前 | 显示全部楼层   浙江省嘉兴市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (15/15)

签到天数: 14 天

发表于 4 天前 | 显示全部楼层   广西壮族自治区柳州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 13 天

发表于 4 天前 | 显示全部楼层   广西壮族自治区柳州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 17 天

发表于 4 天前 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/4)

签到天数: 15 天

发表于 4 天前 | 显示全部楼层   北京市北京市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

签到天数: 10 天

发表于 5 天前 | 显示全部楼层   河北省邯郸市
6666666666666666666
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 5 天前 | 显示全部楼层   山东省潍坊市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

签到天数: 18 天

发表于 5 天前 | 显示全部楼层   山东省青岛市
固定key啊,那安全性有点悬呢,建议换动态的更安全点哈
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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