关于常见编码和加密算法分析

常见编码分析


二进制(bit)
    0或1

字节(byte)
    一个字节占8个bit位,一个字节可以表示0到255之间的整数值。如果要表示256这个数值,需要使用至少两个字节。
    例如,十进制数值10的字节表示为00001010。

    字节是计算机信息存储的基本单位,通常由8个二进制位(bit)组成。
     1 KB(kilobyte,千字节)等于1024字节;
     1 MB(megabyte,兆字节)等于1024 KB;
     1 GB(gigabyte,吉字节)等于1024 MB;
     1 TB(terabyte,太字节)等于1024 GB;
     1 PB(petabyte,拍字节)等于1024 TB;
     1 EB(exabyte,艾字节)等于1024 PB;
     1 ZB(zettabyte,泽字节)等于1024 EB;
     1 YB(yottabyte,佑字节)等于1024 ZB。

ASCII码
    每个字符用一个字节表示,范围是0到127。例如,字符 'A' 的ASCII码是65,用二进制表示就是01000001。

UTF-8编码
    采用1至4个字节不等的编码长度。
    英文大小写字母和数字,特殊符号都采用一个字节表示,   中文用三个字节表示,

ISO-8859-1
    每个字符用一个字节表示,范围是0到255,覆盖了拉丁字母及西欧其他语言的字符。

GB2312、GBK、Big5
    这些中文编码方式通常采用两个字节表示一个中文字符,范围不同,可以覆盖简体中文和繁体中文的字符。

Hex编码(Hexadecimal Encoding) 十六进制
    十六进制使用0-9以及a-f  表示数字0到15
    一个字节(8位)的二进制数   可以用两个十六进制数字表示

    例如,二进制数11011011可以转换为十六进制数:
        1101 -> D
        1011 -> B
        11011011的十六进制表示为DB

Base64编码
    使用64个字符来表示二进制数据,包括大小写字母、数字和两个额外的符号。
    每3个字节的二进制数据会被编码为4个字符。编码后的数据长度比原始数据稍长

    Base64编码的原理是将输入数据按照3个字节(24位)一组进行分割,每个字节占8位,然后将这24位的数据按照6位一组分割成4组,每组6位转换为一个Base64字符。如果数据不足3字节,则在末尾添加0,并且用=字符填充。


编码类型示例:

Unicode编码: \u0068\u0065\u006c\u006c\u006f\u0031\u0032\u0033\u5468\u6dd1\u6021
十六进制编码: \x68\x65\x6c\x6c\x6f\x31\x32\x33\x5468\x6dd1\x6021
十进制编码: 104,101,108,108,111,49,50,51,21608,28113,24609
Base64编码: aGVsbG8xMjPlkajmt5HmgKE=

常见加密算法分析

MD5
    识别:
        长度32位,结果不变    123456 >>  e10adc3949ba59abbe56e057f20f883e

    介绍:
        加密不可逆,不可破解,但简单的明文加密后可以通过撞库破解

    应用场景:
        校验数据或文件完成性

SHA-1、SHA-256、SHA-512
    识别:
        SHA-1:长度160
        SHA-256:长度256
        SHA-512:长度512


MAC -> MD5、SHA-1、SHA-256、SHA-512
    注意:
        加密时多了一个密钥,密钥是随机生成的

DES/ECB  DES/CBC
    识别:
        ECB模式没有IV,没有CBC安全      CBC模式有IV
        key不变结果不变,长度随密文长度而变长

    介绍:
        DES 密钥本身是 64 位  (固定8个字节)
        DES 有效密钥长度为 56 位。 其中 8 位是用于奇偶校验的

        填充方式:NoPadding、PKCS5Padding

        DES/ECB模式 采用每个8字节一组,相同的组的内容加密出来是一样的。
        DES/CBC模式 采用位异或,即使每组相同,加密出的结果也不同

        密钥长度较短,DES 被认为是不安全的,被人破解过

    应用场景:
        适合大量数据的加密


DESSede
    介绍:
        DES 密钥本身是 168 位  (固定24个字节)
        其他和DES差不多


AES/ECB  AES/CBC
    识别:
        ECB模式没有IV      CBC模式有IV
        key不变结果不变,长度随密文长度而变长

    介绍:
        AES 支持三种不同的密钥长度:128 位(16字节)、192 位(24字节)、256 位(32字节)
        默认128位

        分组长度 128位、 iv向量长度 128位

        填充方式:NoPadding、PKCS5Padding

    应用场景:
        适合大量数据的加密

RSA
    识别:
        公钥要比密文长     公钥216 得到长度172       公钥392 得到长度344
        使用 PKCS1_v1_5,PKCS1_OAEP等随机填充  即使公钥相同,每次结果变化

        RSA 公有指数+模数生成公钥 进行nopadding模式(填充数全部为0)的加密,每次结果一样


MD5withRSA、SHA1withRSA、SHA256withRSA
    介绍:
        RSA密钥长度 512 - 65536位,长度必须是64 的倍数

        MD5withRSA  RSA密钥默认长度 1024
        SHA1withRSA  RSA密钥默认长度 1024
        SHA256withRSA  RSA密钥默认长度 2048

        签名长度 与密钥长度相同    使用RSA私钥签名,使用公钥验证

        使用的填充方式都是NoPadding,保证对同一个数据签名之后的结果一致

    流程:
        MD5withRSA示例:
            签名:
                原数据MD5加密,再使用RSA私钥进行加密,得到签名
            将原数据和签名一同发出,用户拿到签名使用公钥进行验证
            验证:
                传入原数据,签名,公钥
                将原数据重新MD5加密,再使用RSA私钥进行加密,得到签名,进行传入签名的比对
                返回True或False

    应用场景:
        数字签名算法可以对传输的数据进行很好的保护

其他


关于re.findall()
re.findall()取数据时会把字符串中的\n变成\\n
所以还是要加一个replace
publicKey = re.findall('"key":"(.*?)"', html)[0].replace('\\n', '\n')


关于RSA
RSA源码关键词判别:this.doPublic(m)     c.toString(16)
function RSAEncrypt(text) {
        var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
        if(m == null) return null;
        var c = this.doPublic(m);
        if(c == null) return null;
        var h = c.toString(16);
        if((h.length & 1) == 0) return h; else return "0" + h;
    }
前端加密出来之后将结果从十六进制转成b64,就相当于python的RSA加密

关于公钥的创建关键词搜索:
setPublicKey


关于DES的key长度

var key = "passport-gw-pc";
前端这里会自动处理
var keyHex = CryptoJS.enc.Utf8.parse(key);

后端需要是八个字节,取前八位,加密出来结果和前端一样
key = "passport-gw-pc".encode('utf-8')[:8]


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值