BASE编码(BASE-N):编了码的字串如果有换行符或者空格,解码会出错。
进制转换(ScaleConvert):左位移或者右位移时,数据有误。
以上问题已经修复。
github:daddysir/crypto: 密码学综合工具 (github.com)
百度网盘:https://pan.baidu.com/s/1hRUE_07OaoX9DEwuNGAEWw 提取码:9qz8
工具可能还有BUG,或者重大BUG,如有发现,请尽快告知,我好及时修复,以方便大家使用。
在加解密过程中,密钥不足时,将会自动用0来填充,如果密钥数超过该算法规定的位数,会自动截取前面的数据。
如果想在密钥框、明文框或者IV(向量)/计数器框想输入16进制,标志是"H:"(冒号可以是全角或者半角)。
选择类似图中的复选框时, 点击红圈以内的范围,可以选中或者取消。
点击左边的静态标签,可以清空对应的编辑框里的内容:
BASE编码(BASE-N):编码时,密文输出格式将失效。如果要编码的明文开头就是"H:"或者"H:",那么,这与十六进制标识冲突了。此时,可以到ScaleConvert把以"H:"或者"H:"开头的明文全部转换为十六进制,再来编码。或使用其他更为方便的工具来编码或者解码。
H:(冒号半角)
H:(冒号全角)
解码时,如果明文是以十六进制输出,那么,不会有"H:"或者"H:"标识,输出的直接是十六进制字符串。
除了密文输出格式将失效,以上的规则也适用于加解密。
StreamCipher界面,如下图:
其中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界面,如下图:
其中,经常使用的DES、AES和RC算法,有独立的tab标签。在BlockCipher界面时,支持把文本文件拖拽到明文框或者密文框,也可以把明文框或者密文框的内容保存至文本文件。
本工具提供了六种加密模式:ECB(电码本模式)、CBC(密文分组链接模式)、CTR(计数器)、CFB(密文反馈模式)、OFB(输出反馈模式)、PCBC(明文密码块链接模式),其中CFB和OFB加密模式,才有移位寄存器,其值一般情况下是8位,步长是8位。
RC5分组密码算法具有可变块大小(32,64或128),密钥大小(0到2040位)和轮回数(0到255)。此工具提供的RC5算法的块长度是64位(bit),轮数有8轮、12轮和16轮,密码长度0-225位(字节)。明文8个字节一组,不足将会按照填充模式来填充。
RC6为RC5派生的对称分组密码算法。此工具提供的RC6算法的块长度是128位(bit),轮数是20轮,密码长度0-255位(字节)。明文16个字节一组,不足将会按照填充模式来填充。
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界面如下:
Keysize的大小:0-8192,步长8bit。
DSA、ECC,以及国密sm2、sm9等算法,还没抽出时间来写,如有不便,还请见谅。
消息摘要界面,如下:
本工具提供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系列摘要算法,这款工具提供了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字节)。
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算法按类型,分为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分组密码,该算法来自俄罗斯,首次出版是在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。
加盐的操作,主要针对的是MD5。
BASE-N界面如下:
有Base16、Base32、Base36、Base58、Base60、Base62、Base64、Base85、Base91、Base92编码算法。在映射表中的字符,是各base算法的标准映射字符,但可以根据情况,替换掉一些字符。编码或者解码的时候,程序会读取映射表里的内容。
自定义的base算法,至少需要2个字符以上,其算法和Base36算法一样,对明文循环取余。
FileHash界面如下:
一个文件,如果需要计算其多个hash值,那么,可以开启多线程进行并行运算。要进行并行运算,需要开启多核。查看CPU有多少核数,具体步骤:WIN+R(或者打开cmd) -> 输入:msconfig -> 引导 -> 高级选项 -> 勾选处理器个数。可以把数值设置为最大,点击确定。重启生效。
FileEncrypt界面如下:
文件加密提供了DES、AES、SM4、ZUC等加密算法,加密模式有ECB、CBC、CTR、PCBC四种。加密后文件的后缀名是pediy。保存密钥时,密钥的后缀名是key。
注:SM4、aes128、aria256算法,此工具没有提供PCBC加解密模式,选择PCBC模式就是选中CBC模式。
载入密钥时,可以直接拖拽。
解密时,把要解密的文件拖拽进窗口,载入正确的密钥,点击解密按钮,等待解密完成:
在加解密过程中,用到CBC、CTR或者PCBC模式时,块大小之间没有任何关系,这些加密模式只在块内部起作用,比如需要把一个大文件加密,块大小分为12MB(即每次从文件中读取12MB),第一个12MB加密时,用的是原始密钥和向量,第二个12MB加密用的还是原始密钥和向量,依此下去,最后完成加密。
如果要使用别的工具解密此工具加密的软件时,要注意此策略。
块大小设置,一般为12MB即可:
(块大小设置,要考虑线程数和文件数,假如块大小为60MB,文件数有20个,开启的线程数16个,那么内存的消耗就为60 × 16 = 960MB,这就大大的占用了内存的使用空间。另外,决定加解密的速度在于加密算法的优劣,申请大块内存来加密数据,与申请小块内存来加密数据,速度提升并不明显)
二次加密策略: 如下图,选择CAST128,填写向量2(iv)、密钥2(K),块大小进行第一次加密后,程序接着会把加密后块大小进行第二次加密,二次加密用的是密钥2和向量2(ECB模式和RC4流加密没有向量),最后写入文件中,然后读取第二个块,重复前面的步骤,直到加密完成。
注意:对于二次加密,解密时顺序是不变的,加密的时候如果是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界面如下:
这款工具提供了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算法:
HMAC(全称:哈希消息认证码),算法比较容易理解,整个运算过程如下图:
其中,单项散列函数可以是任何安全的单项散列函数(比如:sha256、sm3、ripemd、whirlpool等等),本工具提供了常用的HMAC算法。
BigCalc界面如下:
以下对图中按钮做一个说明:
第一排:
加: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次方。
浮点精度设置,如下图:
位移(bit)设置,如下图:
gPrime和gRandom的长度设置,如下图:
注:进行X^Y运算时,如果X是浮点数,且数值较大,幂指数Y也较大,可能会造成程序卡顿甚至崩溃。如造成不便,深感不安,请使用其他更专业的工具来计算。
ScaleConvert界面如下:
在上图中任何编辑框输入字符,其他窗口会实时更新数据。
转换按钮可以把ASCII编辑框切换为Unicode编辑框:
查看浮点转换,不勾选Switch:
累加是对十六进制编辑框的16进制数字进行累加:
注:如果输入数据过多,会缓慢卡顿直到程序崩溃。如果把数据粘贴到编辑框,数据过大,会造成程序卡住或者直接崩溃。(BUG修复后会及时通知)
UI设计,借鉴了飘云阁提供的密码学综合工具的设计界面,并做了一些改进,以方便大家使用:
飘云阁官网:https://www.chinapyg.com/
加密库:编写这款工具主要使用了三个加密库,分别是OPENSSL、GmSSL、Crypto++。
openssl官网:/index.html (openssl.org)
GmSSL资源:https://github.com/GmSSL/GmSSL
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-11-19 02:46
被舒默哦编辑
,原因: 更正