找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 50|回复: 0

密码学综合工具(更正v0002)

[复制链接]

2万

主题

128

回帖

10万

积分

管理员

积分
106367
发表于 2021-11-18 23:11:01 | 显示全部楼层 |阅读模式 IP:山东省青岛市 移动

登录后更精彩...O(∩_∩)O...

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

×
密码学综合工具(更正v0002)
大数运算(BigCalc):X^(1/2)运算不能自动计算浮点。

BASE编码(BASE-N):解码时,明文为hex,如果明文中有00,会被截断,显示不全。另外,用base16和base32编码后再解码,解码是错误的。

进制转换(ScaleConvert):如果是单个字节之间转换的话,那么,十进制和八进制显示就不正确。左位移或者右位移时,数据有误。

以上问题已经修复。


百度网盘:https://pan.baidu.com/s/1hRUE_07OaoX9DEwuNGAEWw 提取码:9qz8

工具可能还有BUG,或者重大BUG,如有发现,请尽快告知,我好及时修复,以方便大家使用。
使用说明加解密
在加解密过程中,密钥不足时,将会自动用0来填充,如果密钥数超过该算法规定的位数,会自动截取前面的数据。

如果想在密钥框、明文框或者IV(向量)/计数器框想输入16进制,标志是"H:"(冒号可以是全角或者半角)。

0.png
其他
选择类似图中的复选框时, 点击红圈以内的范围,可以选中或者取消。

1.png

点击左边的静态标签,可以清空对应的编辑框里的内容:

2.png
对称密钥流加密(StreamCipher)
StreamCipher界面,如下图:

3.png

其中XXTEA算法是分组加密算法,不属于流加密算法,需要注意。

以下对流加密算法的密钥长度和向量长度,做一个说明:

rc4:密钥长度1到256个字节。

zuc128(国密祖冲之流加密算法):密钥长度16字节,向量16字节。

zuc256(国密祖冲之流加密算法):密钥长度32字节,向量23字节。

chacha20_128:密钥长度16字节,向量8字节。

chacha20_256:密钥长度32字节,向量8字节。

chachatls:密钥长度32字节,向量12字节。

xchacha20:密钥长度32字节,向量24字节。

hc_128:密钥长度16字节,向量16字节。

hc_256:密钥长度32字节,向量32字节。

panama:密钥长度32字节,向量32字节。

rabbit128:密钥16字节。

rabbit128(withiv):密钥16字节,向量8字节。

sosemanuk:密钥1到32个字节,向量16字节。

salsa20_128:密钥长度16个字节,向量8字节。

salsa20_256:密钥长度32个字节,向量8字节。

xsalsa20:密钥长度32字节,向量24字节。
分组加密(BlockCipher)
BlockCipher界面,如下图:

4.png

其中,经常使用的DES、AES和RC算法,有独立的tab标签。在BlockCipher界面时,支持把文本文件拖拽到明文框或者密文框,也可以把明文框或者密文框的内容保存至文本文件。

本工具提供了六种加密模式:ECB(电码本模式)、CBC(密文分组链接模式)、CTR(计数器)、CFB(密文反馈模式)、OFB(输出反馈模式)、PCBC(明文密码块链接模式),其中CFB和OFB加密模式,才有移位寄存器,其值一般情况下是8位,步长是8位。

5.png
RC5
RC5分组密码算法具有可变块大小(32,64或128),密钥大小(0到2040位)和轮回数(0到255)。此工具提供的RC5算法的块长度是64位(bit),轮数有8轮、12轮和16轮,密码长度0-225位(字节)。明文8个字节一组,不足将会按照填充模式来填充。
RC6
RC6为RC5派生的对称分组密码算法。此工具提供的RC6算法的块长度是128位(bit),轮数是20轮,密码长度0-255位(字节)。明文16个字节一组,不足将会按照填充模式来填充。
CAST
CAST-128加密算法被设计为密码长度是可变的,从40位到128位,每次递增8位。对于不同的密码长度,分别采用不同的规范:
  • 密码长度从40到80,按照上述算法操作,但是采用12循环而不是16。
  • 如果密码长度大于80位,采用完整的16次循环。
  • 如果密码长度小于128位,则在最低位补0直到128位。



这款工具提供了CAST加密的三种模式:
  • CAST5-40 分组长度8字节,密钥长度可以是5字节到10字节。
  • CAST128 分组长度8字节,密钥16个字节。
  • CAST256 分组长度16个字节,密钥32个字节。

其他
其他一些分组加密算法的分组长度,以及密钥长度说明:

rc2:分组长度8字节,密钥长度8到128个字节。

aria:分组长度128bit(16个字节),密钥长度支持:128bit、192bit和256bit。

camellia:分组长度是16个字节,密钥长度支持:128bit(16字节)、192bit(24字节)和256bit(32字节)。

IDEA:分组长度为64位(8个字节),密钥长度为128位(16个字节),轮数8轮。

sm4(国密分组加密算法):分组长度为128位(16个字节),密钥长度为128位(16个字节)。

3way:分组长度和密钥长度都是12个字节,轮数11轮。

gost:分组长度8字节,密钥32个字节。

mars:分组长度为16字节,密钥长度支持:16字节、24字节、32字节、40字节、48字节、56个字节。

serpent:分组长度128bit(16个字节),密钥长度支持:128bit、192bit和256bit。

safer-k、safer-sk:分组长度8个字节,密钥长度支持:64bit和128bit。

shark:分组长度8个字节,密钥长度16个字节。

square:分组长度和密钥长度均为16个字节,轮数为8轮。

skipjack:分组长度8个字节,密钥长度10个字节

tea、xtea:分组长度8字节,密钥长度16字节,轮数32轮

xxtea:分组长度4字节,密钥长度16字节。与tea和xtea的不同之处在于,其每添加一个字节,整个密文都会发生改变。

gost:分组长度8字节,密钥长度32字节。

shacal2:分组长度32字节,密钥长度16字节到64字节。 设置密钥的时候,最好设置成64字节。

simeck32:分组长度4字节,密钥长度8字节,轮数32轮。

simeck64:分组长度8字节,密钥长度16字节,轮数44轮。

speck64:分组长度8字节,密钥长度支持:96bit(12字节)、128bit(16字节)。

speck128:分组长度16字节,密钥长度支持:128bit、192bit、256bit。

blowfish: 分组长度是8个字节,密钥长度为4到56个字节,轮数16轮。

twofish:分组长度16字节,密钥长度支持:128bit、192bit、256bit。

threefish256:分组长度和密钥长度均为256bit(32字节)。

threefish512:分组长度和密钥长度均为512bit(64字节)。

threefish1024:分组长度和密钥长度均为1024bit(128字节)。

simon64:分组长度8字节,密钥长度支持:96bit(12字节)、128bit(16字节)。

simon128:分组长度16字节,密钥长度支持:128bit、192bit、256bit。

cham64:分组长度8字节,密钥长度16字节。

cham128:分组长度16字节,密钥长度支持:128bit、256bit。

hight:分组长度8字节,密钥长度16字节。

lea:分组长度16字节,密钥长度支持:128bit、192bit、256bit。

seed:分组长度和密钥长度均为128bit(16字节),轮数16轮。
非对称密钥RSA
RSA界面如下:

6.png

Keysize的大小:0-8192,步长8bit。

7.png
other
DSA、ECC,以及国密sm2、sm9等算法,还没抽出时间来写,如有不便,还请见谅。
消息摘要(HashDigest)
消息摘要界面,如下:

8.png
MD
本工具提供md摘要算法有md2、md4和md5。其中,md2消息分组为128bit一组,md4和md5是512bit一组。

输出类型有:md2、md2_middle、md4、md4_middle、md5、md5_middle、md5(md5($pass))、md5(md5(md5($pass)))、md5(sha1($psss))。
SHA
SHA系列摘要算法,这款工具提供了sha1、sha2和sha3算法。

输出类型有:

sha1:sha1、sha1(sha1($psss))、sha1(md5($psss))

sha2:sha224、sha256、sha256(md5($pass))、sha384、sha512、sha512—224、sha512_256

sha3:sha3_224、sha3_256、sha3_384、sha3_512、shake128、shake256

需要注意,shake128和shake256算法,其输出的hash值长度是可变的,默认输出长度为512bit(64字节),在选项卡的右上角,可以更改其默认值。但在选项卡"FileHash"中,其输出的长度固定为512bit(64字节)。

9.png

10.png

sha1:消息分组512bit一组。

sha224、sha256:消息分组512bit一组。

sha384、sha512、sha512_224、sha512_256:消息分组1024bit一组。

sha3_224:消息分组1152bit一组。144字节

sha3_256:消息分组1088bit一组。136字节

sha3_384:消息分组832bit一组。104字节

sha3_512:消息分组576bit一组。72字节

shake128:消息分组1344bit一组。168字节

shake256:消息分组1088bit一组。136字节
Tiger
tiger算法按类型,分为tiger1和tiger2,tiger1算法是在明文结尾填充0x01,tiger2算法在明文结尾填充0x80。其消息分组为512bit一组。

按计算轮数,有3轮和4轮的区别。

本工具提供四种输出类型:

tiger1_192_3、tiger1_192_4、tiget2_192_3、tiger2_192_4。

此外,还有128位(bit)和160位(bit),但是算法没变,只是从192位上截取前128位或者前160位。
GOST
GOST哈希算法基于GOST分组密码,该算法来自俄罗斯,首次出版是在1994年,是俄罗斯国家标准中定义的标准哈希算法。GOST在2012中进行了修订。

本工具提供了四种输出类型:gost12_128、gost12_256、gost94、gost94_crypto。

gost12:消息分组为512bit一组。

gost94:消息分组为256bit一组。
其他
KECCAK:keccak_224、keccak_256、keccak_384、keccak_512。

RIPEMD:ripemd_128、ripemd_160、ripemd_256、ripemd_320。

Haval:haval_128_3、haval_160_3、haval_192_3、haval_224_3、haval_256_3、haval_128_4、haval_160_4、haval_192_4、haval_224_4、haval_256_4、haval_128_5、haval_160_5、haval_192_5、haval_224_5、haval_256_5。

Whirlpool:whirlpool。

SM3(国密hash算法):sm3。

blake:blake2s_256、blake2b——512、blake3。

CRC:crc16_modbus、 crc16_xmodem、crc32b、crc64、adler32。

分组长度:

keccak_224:消息分组1152bit一组。

keccak_256:消息分组1088bit一组。

keccak_384:消息分组832bit一组。

keccak_512:消息分组576bit一组。

ripemd:消息分组512bit一组。

haval:消息分组1024bit一组。

whirlpool:消息分组512bit一组。

sm3:消息分组512bit一组。

blake2b:消息分组1024bit一组。

注:

crc16_modbus的多项式是:x^16+x^15+x^2+1。

crc16_xmodem的多项式是:x^16+x^15+x^5+1。

crc64,其多项式的POLY(HEX)为:0xad93d23594c935a9。
加盐(s)
加盐的操作,主要针对的是MD5。
BASE系列编码(BASE-N)
BASE-N界面如下:

11.png

有Base16、Base32、Base36、Base58、Base60、Base62、Base64、Base85、Base91、Base92编码算法。在映射表中的字符,是各base算法的标准映射字符,但可以根据情况,替换掉一些字符。编码或者解码的时候,程序会读取映射表里的内容。

自定义的base算法,至少需要2个字符以上,其算法和Base36算法一样,对明文循环取余。

12.png
文件哈希(FileHash)
FileHash界面如下:

13.png

14.png

一个文件,如果需要计算其多个hash值,那么,可以开启多线程进行并行运算。要进行并行运算,需要开启多核。查看CPU有多少核数,具体步骤:WIN+R(或者打开cmd) -> 输入:msconfig -> 引导 -> 高级选项 -> 勾选处理器个数。可以把数值设置为最大,点击确定。重启生效。

15.png
文件加密(FileEncrypt)
FileEncrypt界面如下:

16.png

17.png

文件加密提供了DES、AES、SM4、ZUC等加密算法,加密模式有ECB、CBC、CTR、PCBC四种。加密后文件的后缀名是pediy。保存密钥时,密钥的后缀名是key。

注:SM4、aes128、aria256算法,此工具没有提供PCBC加解密模式,选择PCBC模式就是选中CBC模式。

载入密钥时,可以直接拖拽。

18.png

解密时,把要解密的文件拖拽进窗口,载入正确的密钥,点击解密按钮,等待解密完成:

19.png
加解密的策略
在加解密过程中,用到CBC、CTR或者PCBC模式时,块大小之间没有任何关系,这些加密模式只在块内部起作用,比如需要把一个大文件加密,块大小分为12MB(即每次从文件中读取12MB),第一个12MB加密时,用的是原始密钥和向量,第二个12MB加密用的还是原始密钥和向量,依此下去,最后完成加密。

如果要使用别的工具解密此工具加密的软件时,要注意此策略。

块大小设置,一般为12MB即可:

20.png

(块大小设置,要考虑线程数和文件数,假如块大小为60MB,文件数有20个,开启的线程数16个,那么内存的消耗就为60 × 16 = 960MB,这就大大的占用了内存的使用空间。另外,决定加解密的速度在于加密算法的优劣,申请大块内存来加密数据,与申请小块内存来加密数据,速度提升并不明显)

二次加密策略: 如下图,选择CAST128,填写向量2(iv)、密钥2(K),块大小进行第一次加密后,程序接着会把加密后块大小进行第二次加密,二次加密用的是密钥2和向量2(ECB模式和RC4流加密没有向量),最后写入文件中,然后读取第二个块,重复前面的步骤,直到加密完成。

21.png

注意:对于二次加密,解密时顺序是不变的,加密的时候如果是AES+ SM4,解密时仍然是AES + SM4。此工具解密时的策略:程序会先读取第二个位置的SM4,然后再读取AES。
此外,要加密的软件,字节数如果没有按照16字节对齐,则会以PKCS7Padding模式填充后对齐。然后,会在末尾再填充32字节的指纹,指纹信息如下:

char g_fingerprint[33] = { 0x8A, 0xC2, 0x02, 0xC0, 0x32, 0xC8, 0x4D, 0xC1, 0x89, 0x80, 0xE8, 0xFE, 0xE6, 0x07, 0x1F, 0xB6, 0xC9, 0x6B, 0xDd, 0x1B, 0x0F, 0xD9, 0xC7, 0xAF, 0x45, 0xD0, 0xEa, 0xE1, 0x88, 0x55, 0xEC, 0xF4, 00 };

使用别的工具解密此工具加密的软件时,则需要查看是否有此指纹信息,然后去除多余字节。

填写密钥时,密钥的长度,可以点击随机生成按钮查看。
消息认证码(MAC)
MAC界面如下:

22.png

​ 这款工具提供了ChaCha20Poly1305、ZUC_Mac(祖冲之完整性算法)和Hmac消息码的完整性校验算法。

ChaCha20-Poly1305是由ChaCha20(流密码)和Poly1305消息认证码(MAC)结合的一种应用在互联网安全协议中的认证加密算法,由Google公司率先在Andriod移动平台中的Chrome中代替[RC4]使用。XChaCha20-Poly1305是ChaCha20-Poly1305的变体。

ChaCha20-Poly1305:密钥长度32字节,向量长度12,addM(附加消息)长度任意。

XChaCha20-Poly1305:密钥长度32字节,向量长度24,addM(附加消息)长度任意。

ZUC_Mac:密钥长度16字节,向量长度16,addM(附加消息)长度任意。

ZUC256_Mac:密钥长度32字节,向量长度23,addM(附加消息)长度任意。

如果密钥、向量和addM位数不足,将会用0自动填充。

密文框内容和解密按钮只作用于ChaCha20-Poly1305和XChaCha20-Poly1305算法:

23.png

HMAC(全称:哈希消息认证码),算法比较容易理解,整个运算过程如下图:

24.png

其中,单项散列函数可以是任何安全的单项散列函数(比如:sha256、sm3、ripemd、whirlpool等等),本工具提供了常用的HMAC算法。
大数计算(BigCalc)
BigCalc界面如下:

25.png

以下对图中按钮做一个说明:

第一排:

加:X+Y

减:X-Y

乘法:X*Y

除法:X/Y

X的Y次方:X^Y (如果X是浮点数,则Y要小于等于0x7FFFFFFF)

开平方根:X^(1/2)

求余:X MOD Z

X的Y次方对Z取模:X^Y MOD Z

模逆:X^(-1) MOD Z

X的A次方乘以Y的B次方对Z取模:X^A*Y^B MOD Z

第二排:

算数左移(或者逻辑左移):<<X

算数右移(有符号):>>X

逻辑右移(无符号):>>>X

阶乘:X!(X的大小:小于或者等于0x7FFFFFFF的长度)

按位取反:~X

比较两个数的大小:X cmp Y

按位与:X and Y

按位或:X or Y

按位异或:X xor Y

分数求模:X/Y MOD Z (有BUG,还没处理)

连乘:X*Y*Z*A*B

第三排:

是否是素数:isPrime(X)

最大公约数:GCD(X,Y)

生成素数:gPrime

生成随机数:grandom


此外,支持浮点运算。

支持的浮点运算有:加、减、乘、除、开平方根、X的Y次方。

浮点精度设置,如下图:

26.png

位移(bit)设置,如下图:

27.png

gPrime和gRandom的长度设置,如下图:

28.png

注:进行X^Y运算时,如果X是浮点数,且数值较大,幂指数Y也较大,可能会造成程序卡顿甚至崩溃。如造成不便,深感不安,请使用其他更专业的工具来计算。

29.png
进制转换(ScaleConvert)
ScaleConvert界面如下:

30.png

在上图中任何编辑框输入字符,其他窗口会实时更新数据。

转换按钮可以把ASCII编辑框切换为Unicode编辑框:

31.png

查看浮点转换,不勾选Switch:

32.png

累加是对十六进制编辑框的16进制数字进行累加:

33.png
参考
UI设计,借鉴了飘云阁提供的密码学综合工具的设计界面,并做了一些改进,以方便大家使用:

34.png

飘云阁官网:https://www.chinapyg.com/

加密库:编写这款工具主要使用了三个加密库,分别是OPENSSL、GmSSL、Crypto++。



Crypto++官网:https://cryptopp.com/

大数库:OPENSSL提供的BN大数库、GMP、BigDigits。



其他参考:

md5在线加解密网站:https://www.cmd5.com/

hash在线计算:https://1024tools.com/hash(种类较全)

CTF在线工具:http://www.hiencode.com/

汉字字符集编码查询:https://www.qqxiuzi.cn/bianma/zifuji.php
下载链接
看雪不支持大于8M的附件,我在github和百度网盘都放了一份,大家可以自行下载。

下载地址在文章开头。



回复

使用道具 举报

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

本版积分规则

QQ|IOTsec-Zone|在线工具|CTF WiKi|CTF平台汇总|CTF show|ctfhub|棱角安全|rutracker|攻防世界|php手册|peiqi文库|CyberChef|猫捉鱼铃|手机版|小黑屋|cn-sec|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2024-5-22 08:06

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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