chacha20加密c语言算法,Java 11的新加密算法ChaCha20-Poly1305

ChaCha20-Poly1305 介绍

Java 11新增加了加密算法ChaCha20-Poly1305。

ChaCha20-Poly1305相关的名词需要解释一下:

ChaCha20是一种流式对称加密算法。

Poly1305是一种带密码的消息摘要算法。

ChaCha20-Poly1305是一种流式对称加密算法。

说明:我并没有找到Java 11中的Poly1305算法API,于是按照RFC7539实现了一下,见下文代码,为了便于对照原文,有的private函数命名采用下划线分割小写字母方式,不太符合Java规范。

ChaCha20 和 ChaCha20-Poly1305 的区别

这两种算法原理上是一致的。区别如下:

ChaCha20 是流式加密,密文长度和原文长度是相同的。

ChaCha20-Poly1305 在 ChaCha20 的基础上增加了Poly1305 算法运算结果。

ChaCha20 有四个输入:

明文 Plaintext

秘钥 Key

秘钥 Nonce

轮 Initial Counter,整数

ChaCha20-Poly1305 有三个输入,不需要“轮”,其他输入和ChaCha20 一样。

测试用例

Key = 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f.

Nonce = (00:00:00:00:00:00:00:4a:00:00:00:00).

Initial Counter = 1.

Plaintext

000 4c 61 64 69 65 73 20 61 6e 64 20 47 65 6e 74 6c Ladies and Gentl

016 65 6d 65 6e 20 6f 66 20 74 68 65 20 63 6c 61 73 emen of the clas

032 73 20 6f 66 20 27 39 39 3a 20 49 66 20 49 20 63 s of '99: If I c

048 6f 75 6c 64 20 6f 66 66 65 72 20 79 6f 75 20 6f ould offer you o

064 6e 6c 79 20 6f 6e 65 20 74 69 70 20 66 6f 72 20 nly one tip for

080 74 68 65 20 66 75 74 75 72 65 2c 20 73 75 6e 73 the future, suns

096 63 72 65 65 6e 20 77 6f 75 6c 64 20 62 65 20 69 creen would be i

112 74 2e t.

ChaCha20 加密结果:

000 6e 2e 35 9a 25 68 f9 80 41 ba 07 28 dd 0d 69 81

016 e9 7e 7a ec 1d 43 60 c2 0a 27 af cc fd 9f ae 0b

032 f9 1b 65 c5 52 47 33 ab 8f 59 3d ab cd 62 b3 57

048 16 39 d6 24 e6 51 52 ab 8f 53 0c 35 9f 08 61 d8

064 07 ca 0d bf 50 0d 6a 61 56 a3 8e 08 8a 22 b6 5e

080 52 bc 51 4d 16 cc f8 06 81 8c e9 1a b7 79 37 36

096 5a f9 0b bf 74 a3 5b e6 b4 0b 8e ed f2 78 5e 42

112 87 4d

ChaCha20-Poly1305 加密结果:

000 6e 2e 35 9a 25 68 f9 80 41 ba 07 28 dd 0d 69 81

016 e9 7e 7a ec 1d 43 60 c2 0a 27 af cc fd 9f ae 0b

032 f9 1b 65 c5 52 47 33 ab 8f 59 3d ab cd 62 b3 57

048 16 39 d6 24 e6 51 52 ab 8f 53 0c 35 9f 08 61 d8

064 07 ca 0d bf 50 0d 6a 61 56 a3 8e 08 8a 22 b6 5e

080 52 bc 51 4d 16 cc f8 06 81 8c e9 1a b7 79 37 36

096 5a f9 0b bf 74 a3 5b e6 b4 0b 8e ed f2 78 5e 42

112 87 4d 81 db 63 fc b1 89 a0 31 21 ae 0a c7 2a 3f

128 1f 36

我们可以看到两者加密的结果是一致的,除了ChaCha20-Poly1305 加密后面多16个字节内容。

ChaCha20 加密主要代码:

byte[] chacha20(byte[] message, byte[]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值