ChaCha20 is a stream cipher developed by Daniel J. Bernstein. Its original design expands a 256-bit key into 2^64 randomly accessible streams, each containing 2^64 randomly accessible 64-byte (512 bits) blocks. It is a variant of Salsa20 with better diffusion.
在用libsodium的库 chacha20流加密算法
int crypto_stream_chacha20(unsigned char *c, unsigned long long clen,
const unsigned char *n, const unsigned char *k);
第一个函数是不可逆的 不知道有什么意义 只能得到密文 把密文再扔进去什么都不变
int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,
unsigned long long mlen, const unsigned char *n,
const unsigned char *k);
第二个函数可以
1.将m用k,n计算输出c(密文)
2.把m换成密文c则输出明文
那么问题来了,如果你的密文缺了一段
比如说一个4个char长度密文 0x01 0x02 0x03 0x04
如果你缺了0x01 0x02
你是没有办法解密后面两个的
但是你缺了0x03 0x04
前面两个还是可以解出明文
这种情况也属于流加密?
这不是块加密吗 这将明文定了界,要数据块完整才能正确解密啊
无解 只能手动分块加长度header 需要无脑加解密只能用table
一直以为流加密逐个对单字节加密 然而全部实现都分块处理分块异或
所以市面上的aes rc4 chacha 各种流加密都是假的
总结: 只有块加密