前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字段加密后长度变化

字段加密后长度变化

作者头像
王小明_HIT
修改2021-09-05 11:33:51
2.2K0
修改2021-09-05 11:33:51
举报
文章被收录于专栏:程序员奇点
加密算法有哪些
代码语言:javascript
复制
 非对称加密算法:RSA,DSA/DSS 
 对称加密算法:AES,RC4,3DES 
 HASH算法:MD5,SHA1,SHA256

数据加密的长度变化

加密流出

字符串转换成 bytes -> padding -> base64 编码

将字符串转换成 byte

根据字符串所占长度不同,长度会扩充到不同倍数

  • ascii 码的字符,如数字字母等,每个字符只占一个字节,长度不扩充
  • 正常情况下,汉字等 unicode 编码,一个字符占 3 个字节,长度扩充3倍
  • 如果是 mysql 中的 utf8mb4 编码,一个字符最大可以占用4个字节,长度扩充4倍

padding

将bytes 字符填充到16的整数倍,长度最大增加16

加密

长度增加28(消息校验体16, 随机数12)

base64 编码

长度填充到3整数倍, 之后4/3

大致上最大长度为 4/3* n *length + 64

Go 版本实现

getCount 计算:

代码语言:javascript
复制
func getCount(text string) int {
 l := countBytes(text)
 l = countPadding(l)
 l = countEncrypt(l, true)
 l = countBase64(l)
 return l
}

func countBytes(text string) int {
 orig := []byte(text)
 return len(orig)
}

func countPadding(l int) int {
 pl := 16 - (l % 16)
 return l + pl
}

func countEncrypt(l int, flag bool) int {
 if flag == false {
  return l + 16
 }
 return l + 16 + 12
}

func countBase64(l int) int {
 if l%3 == 0 {
  return l / 3 * 4
 } else {
  return (l/3 + 1) * 4
 }
}

内推链接

欢迎关注公众号:程序员财富自由之路

微信号:程序员财富自由之路

博客:CSDN 王小明

关注我们,了解更多

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据加密的长度变化
  • 加密流出
    • 将字符串转换成 byte
      • padding
        • 加密
          • base64 编码
            • 欢迎关注公众号:程序员财富自由之路
        • Go 版本实现
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档