< 返回版块

LuoZijun 发表于 2020-10-20 20:29

Github: https://github.com/LuoZijun/crypto

描述:支持了 所有的 AEAD 算法。

状态: 持续开发当中。

评论区

写评论
爱国的张浩予 2020-11-01 13:57

大神呀! 我在 github 上又提了一个 issue 。请您有空时看看呀!https://github.com/shadowsocks/crypto/issues/4

爱国的张浩予 2020-10-29 10:34

大神,我以【左填充对齐】的方式,当遇到【明文】长度不是 16 字节的整数倍时,左填充 0 至 utf-8 字节数组的左侧,再执行【sm4 - cbc 加密】;另一方面,在【解密】过程中,先执行【sm4 - cbc 解密】,再扣掉【明文】utf-8 字节数组左侧的 0 字节,再将 utf-8 字节数组 变换成 utf-8 字符串。

上面这个作法的确可以成功地【加密】与【解密】本文密码信息。但是,要求【前端】与【后端】都使用我这套实现。

我想问:关于【填充对齐】方式,是否有规范的作法或统一的标准?

这样的话,【前端】可以接着使用您的库和 rust + wasm 包,而【后端】可以使用 JAVA 实现的【sm4 - cbc 解密】包。别我在【前端】加密之后,因为对【填充对齐】的约定与假设不同,造成【后端】JAVA 版的【sm4 - cbc 解密】不能获得正确的值。

--
👇
stuartZhang: 大神,我把这个问题也提到的 github 的 issue 里了。您的 crypto 库能够被交叉编译至 wasm 架构。膜拜,五体投地!

--
👇
stuartZhang: 大神,您的 crypto 库真心地佬强大了。

  • 首先,我修改 cargo.toml 文件,以 git 依赖的方式,将 crypto 引作依赖
crypto2 = {git = "https://github.com/shadowsocks/crypto", branch = "master", package = "crypto"}
  • 其次,我在使用其提供的 sm4 - cbc 模式时,注意到被加密【明文】(utf-8 英文字母,数字与下划线)的长度必须是 16 的整数倍。16 被定义在属性 Sm4Cbc::BLOCK_LEN 内。
  • 然后,我照做了。
    • (1)将【明文】字符串(比如,abcde,123 )转换成 &[u8] 数组。
    • (2)若 &[u8] 数组的长度不是 16 的整数倍,则将其扩容至 16 的整数倍。
    • (3)扩容的新数组元素,填充值为 0。我做的左侧填充。
  • 于是,sm4 加密之。运行正常。牛!!
  • 接着,将加密之后的新 &[u8] 做 base64 编码。发送给后端 web server。
  • 接下来,后端先 base64 解码;再使用 crypto 库 sm4 - cbc 模式的解密 Public API 将【密文】解密为【明文】 &[u8]
  • 最后,再使用 String::from_utf8() 将 【明文】 &[u8] 变形回【明文】 字符串。

但是,在这里我的问题来了。解密之后的明文字符串是

    \u{0}\u{0}\u{0}\u{0}\u{0}\u{0}\u{0}abcde,123

我分析:上面一连串的 \u{0} 是我在加密过程中,给 &[u8] 数组左填充的 0。右侧的解决结果 abcde,123 是正确的。太牛了!!!

大神,对于潜在任意长度的【明文】 字符串,我如何才能避免或解决(加密过程中)由 &[u8] 数组扩容(长度必须是 16 的整数倍)填充值 0 造成的 解密结果里的 \u{0} 呀?

大神,我不知道我在上面的描述是否清晰。但,还是请求您的帮助。

爱国的张浩予 2020-10-29 00:09

大神,我把这个问题也提到的 github 的 issue 里了。您的 crypto 库能够被交叉编译至 wasm 架构。膜拜,五体投地!

--
👇
stuartZhang: 大神,您的 crypto 库真心地佬强大了。

  • 首先,我修改 cargo.toml 文件,以 git 依赖的方式,将 crypto 引作依赖
crypto2 = {git = "https://github.com/shadowsocks/crypto", branch = "master", package = "crypto"}
  • 其次,我在使用其提供的 sm4 - cbc 模式时,注意到被加密【明文】(utf-8 英文字母,数字与下划线)的长度必须是 16 的整数倍。16 被定义在属性 Sm4Cbc::BLOCK_LEN 内。
  • 然后,我照做了。
    • (1)将【明文】字符串(比如,abcde,123 )转换成 &[u8] 数组。
    • (2)若 &[u8] 数组的长度不是 16 的整数倍,则将其扩容至 16 的整数倍。
    • (3)扩容的新数组元素,填充值为 0。我做的左侧填充。
  • 于是,sm4 加密之。运行正常。牛!!
  • 接着,将加密之后的新 &[u8] 做 base64 编码。发送给后端 web server。
  • 接下来,后端先 base64 解码;再使用 crypto 库 sm4 - cbc 模式的解密 Public API 将【密文】解密为【明文】 &[u8]
  • 最后,再使用 String::from_utf8() 将 【明文】 &[u8] 变形回【明文】 字符串。

但是,在这里我的问题来了。解密之后的明文字符串是

    \u{0}\u{0}\u{0}\u{0}\u{0}\u{0}\u{0}abcde,123

我分析:上面一连串的 \u{0} 是我在加密过程中,给 &[u8] 数组左填充的 0。右侧的解决结果 abcde,123 是正确的。太牛了!!!

大神,对于潜在任意长度的【明文】 字符串,我如何才能避免或解决(加密过程中)由 &[u8] 数组扩容(长度必须是 16 的整数倍)填充值 0 造成的 解密结果里的 \u{0} 呀?

大神,我不知道我在上面的描述是否清晰。但,还是请求您的帮助。

爱国的张浩予 2020-10-28 23:56

大神,您的 crypto 库真心地佬强大了。

  • 首先,我修改 cargo.toml 文件,以 git 依赖的方式,将 crypto 引作依赖
crypto2 = {git = "https://github.com/shadowsocks/crypto", branch = "master", package = "crypto"}
  • 其次,我在使用其提供的 sm4 - cbc 模式时,注意到被加密【明文】(utf-8 英文字母,数字与下划线)的长度必须是 16 的整数倍。16 被定义在属性 Sm4Cbc::BLOCK_LEN 内。
  • 然后,我照做了。
    • (1)将【明文】字符串(比如,abcde,123 )转换成 &[u8] 数组。
    • (2)若 &[u8] 数组的长度不是 16 的整数倍,则将其扩容至 16 的整数倍。
    • (3)扩容的新数组元素,填充值为 0。我做的左侧填充。
  • 于是,sm4 加密之。运行正常。牛!!
  • 接着,将加密之后的新 &[u8] 做 base64 编码。发送给后端 web server。
  • 接下来,后端先 base64 解码;再使用 crypto 库 sm4 - cbc 模式的解密 Public API 将【密文】解密为【明文】 &[u8]
  • 最后,再使用 String::from_utf8() 将 【明文】 &[u8] 变形回【明文】 字符串。

但是,在这里我的问题来了。解密之后的明文字符串是

    \u{0}\u{0}\u{0}\u{0}\u{0}\u{0}\u{0}abcde,123

我分析:上面一连串的 \u{0} 是我在加密过程中,给 &[u8] 数组左填充的 0。右侧的解决结果 abcde,123 是正确的。太牛了!!!

大神,对于潜在任意长度的【明文】 字符串,我如何才能避免或解决(加密过程中)由 &[u8] 数组扩容(长度必须是 16 的整数倍)填充值 0 造成的 解密结果里的 \u{0} 呀?

大神,我不知道我在上面的描述是否清晰。但,还是请求您的帮助。

作者 LuoZijun 2020-10-27 19:52

编译到 WASM 将无法使用 硬件加速功能。对于 AES 而言,软件的实现并没有硬件的实现安全高效。

--
👇
stuartZhang: 大神,我给您的 github 工程提了一个 issue 。您是否有时间看看呀?

俺要把这个工程作为依赖关联上我们的 rust + wasm 工程,做 sm4 的 cbc 加密。我们之前使用的 sm4 不支持 cbc 模式。

等 cargo test 编译成功之后,我再看看交叉编译到 wasm 架构是否能成?

爱国的张浩予 2020-10-27 17:53

大神,我给您的 github 工程提了一个 issue 。您是否有时间看看呀?

俺要把这个工程作为依赖关联上我们的 rust + wasm 工程,做 sm4 的 cbc 加密。我们之前使用的 sm4 不支持 cbc 模式。

等 cargo test 编译成功之后,我再看看交叉编译到 wasm 架构是否能成?

爱国的张浩予 2020-10-27 16:41

大神,咱们这个加密库是否支持交叉编译到 wasm 架构上?是否使用过一些在 wasm 架构上不支持的语言特性呀?

作者 LuoZijun 2020-10-27 10:29

欢迎。

--
👇
老牛: 有兴趣参与

作者 LuoZijun 2020-10-27 10:29

暂未发布。

--
👇
stuartZhang: 大神,我还有一个问题,咱们这个库是否有发布到 crates.io 包管理平台呀?看版本和这个(https://crates.io/crates/crypto)对不上的。

--
👇
LuoZijun: ```rust use crypto::blockmode::Sm4Cbc;

fn main() { let key = [1u8; Sm4Cbc::KEY_LEN]; let nonce = [1u8; Sm4Cbc::NONCE_LEN];

let mut cipher = Sm4Cbc::new(&key, &nonce);

let mut data = [1u8; Sm4Cbc::BLOCK_LEN];
cipher.encrypt(&mut data);

cipher.decrypt(&mut data);

}


--  
👇  
stuartZhang: 求 sm4 加密的 cbc 模式的使用例程。


爱国的张浩予 2020-10-27 10:12

大神,我还有一个问题,咱们这个库是否有发布到 crates.io 包管理平台呀?看版本和这个(https://crates.io/crates/crypto)对不上的。

--
👇
LuoZijun: ```rust use crypto::blockmode::Sm4Cbc;

fn main() { let key = [1u8; Sm4Cbc::KEY_LEN]; let nonce = [1u8; Sm4Cbc::NONCE_LEN];

let mut cipher = Sm4Cbc::new(&key, &nonce);

let mut data = [1u8; Sm4Cbc::BLOCK_LEN];
cipher.encrypt(&mut data);

cipher.decrypt(&mut data);

}


--  
👇  
stuartZhang: 求 sm4 加密的 cbc 模式的使用例程。

爱国的张浩予 2020-10-27 10:08

今天晚上,我回家试试。大神,我还有一个问题,咱们这个库,是否支持 wasm-pack 交叉编译为 wasm 文件呀?

我对 rust 的使用场景主要是 rust + wasm 然后使用在浏览器里。

--
👇
LuoZijun: ```rust use crypto::blockmode::Sm4Cbc;

fn main() { let key = [1u8; Sm4Cbc::KEY_LEN]; let nonce = [1u8; Sm4Cbc::NONCE_LEN];

let mut cipher = Sm4Cbc::new(&key, &nonce);

let mut data = [1u8; Sm4Cbc::BLOCK_LEN];
cipher.encrypt(&mut data);

cipher.decrypt(&mut data);

}


--  
👇  
stuartZhang: 求 sm4 加密的 cbc 模式的使用例程。

作者 LuoZijun 2020-10-26 16:14
use crypto::blockmode::Sm4Cbc;

fn main() {
    let key = [1u8; Sm4Cbc::KEY_LEN];
    let nonce = [1u8; Sm4Cbc::NONCE_LEN];

    let mut cipher = Sm4Cbc::new(&key, &nonce);

    let mut data = [1u8; Sm4Cbc::BLOCK_LEN];
    cipher.encrypt(&mut data);
    
    cipher.decrypt(&mut data);

}

--
👇
stuartZhang: 求 sm4 加密的 cbc 模式的使用例程。

爱国的张浩予 2020-10-26 09:54

求 sm4 加密的 cbc 模式的使用例程。

Ryan Li 2020-10-21 19:17

无论是学习还是参与建设都十分有价值!

老牛 2020-10-21 13:11

有兴趣参与

LT 2020-10-20 22:31

加油!

1 共 16 条评论, 1 页