加密原理介绍,代码实现DES、AES、RSA、Base64、MD5

阅读目录

关于网络安全的数据加密部分,本来打算总结一篇博客搞定,没想到东西太多,这已是第三篇了,而且这篇写了多次,熬了多次夜,真是again and again。起个名字:数据加密三部曲,前两部链接如下:

  1. 整体介绍:网络安全——数据的加密与签名,RSA介绍
  2. 编码与哈希实现:网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
  3. 本篇DES、AES、RSA加密的介绍与实现

github下载地址

https://github.com/mddios/EncryptionTools

代码提供两种加解密方法:

一、DES对称加密

关于DES 3DES加密解密原理不再介绍,现在已经用的不多,如果你的项目还在使用DES加密,还是赶快换吧,换做AES或者更强的非对称RSA加密。

另外它与AES有很多的相似性,也可以参照AES介绍。下面是具体的用法。

对"123"加密,密钥为16进制的3031323334353637(01234567)

使用电脑终端:

echo -n "123" | openssl enc -des-ecb -a -K 3031323334353637

结果:
MV5dUGKtzbM=

代码加密解密使用:

首先引入头文件NSString+Encryption.h
/*
 DES加密 key为NSString形式 结果返回base64编码
 */
- (NSString *)desEncryptWithKey:(NSString *)key;

/* DES加密 key为NSData形式 结果返回NSData */ - (NSData *)desEncryptWithDataKey:(NSData *)key; #pragma mark - DES解密 /* DES解密,字符串必须为base64格式,key为字符串形式 */ - (NSString *)desDecryptWithKey:(NSString *)key; /* DES解密 */ + (NSData *)desDecryptWithData:(NSData *)data dataKey:(NSData *)key;

二、AES对称加密

AES是高级加密标准Advanced Encryption Standard的缩写,有多种模式,下面介绍使用最多的两种

ECB(Electronic Code Book,电子密码本)模式

是一种基础的加密方式,要加密的数据被分割成分组长度相等的块(不足补齐,补齐方式下文介绍),然后单独的一个个组加密,合在一起输出组成密文。

电脑终端:

echo -n "123" | openssl enc -aes-128-ecb -a -K 30313233343536373839414243444546
加密结果:
0b6ikfq9CQs11aSCnNXIog==

代码加密解密使用:

首先引入头文件NSString+Encryption.h

/**
 AES-ECB模式加密
 @param key Hex形式,密钥支持128 192 256bit,16、24、32字节,转换为16进制字符串长度为32、48、64,长度错误将抛出异常
 @return 加密结果为base64编码
 */
- (NSString *)aesECBEncryptWithHexKey:(NSString *)key;

/** AES-ECB模式加密 @param key 字符串形式,密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @return 加密结果为base64编码 */ - (NSString *)aesECBEncryptWithKey:(NSString *)key; /** AES-ECB模式加密 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 */ - (NSData *)aesECBEncryptWithDataKey:(NSData *)key; /* ECB模式解密,返回base64编码 */ - (NSString *)aesECBDecryptWithHexKey:(NSString *)key; /* ECB模式解密,返回NSData */ - (NSData *)aesECBDecryptWithDataKey:(NSData *)key;
CBC(Cipher Block Chaining,加密块链)模式

http://7xs4tc.com1.z0.glb.clouddn.com/cipher01.png

是一种循环模式,也将要加密的数据分割为长度相等的组(不足补齐,补齐方式下文介绍),前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度,会比ECB安全一点。但是也因为他们的关联性,造成以下三个缺点:

  • 不利于并行计算:很明显第一组完成才能计算第二组然后第三组。。。
  • 误差传递:也是依次传递
  • 需要初始化向量IV:第二组根据第一组的结果来加密,那第一组根据谁呢?那就是需要额外提供初始化向量

可以在电脑终端(openssl):

echo -n "123" | openssl enc -aes-128-cbc -a -K 30313233343536373839414243444546 -iv 30313233343536373839414243444546

结果:
5IQJlqxa2e5NGzGqqPpoSw==

代码加密解密使用:

首先引入头文件NSString+Encryption.h

/**
 AES-CBC模式加密,默认模式
 @param key Hex形式,密钥支持128 192 256bit,16、24、32字节,转换为16进制字符串长度为32、48、64,长度错误将抛出异常
 @param iv 进制字符串形式;初始化向量iv为16字节。如果为nil,则初始化向量为0
 @return 加密结果为base64编码
 */
- (NSString *)aesEncryptWithHexKey:(NSString *)key hexIv:(NSString *)iv; /** AES-CBC模式加密,默认模式 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @param iv 进制字符串形式;初始化向量iv为16字节。如果为nil,则初始化向量为0 @return 加密结果为base64编码 */ - (NSString *)aesEncryptWithKey:(NSString *)key iv:(NSString *)iv; /** AES-CBC模式加密,默认模式 @param data 要加密的数据 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @param iv 初始化向量iv为16字节。如果为nil,则初始化向量为0 @return 加密结果为NSData形式 */ - (NSData *)aesEncryptWithDataKey:(NSData *)key dataIv:(NSData *)iv; /** AES-CBC模式解密,要求NSString为base64的结果 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @param iv 进制字符串形式;初始化向量iv为16字节。如果为nil,则初始化向量为0 */ - (NSString *)aesBase64StringDecryptWithHexKey:(NSString *)key hexIv:(NSString *)iv; /** AES-CBC模式解密 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @param iv 初始化向量iv为16字节。如果为nil,则初始化向量为0 */ + (NSData *)aesDecryptWithData:(NSData *)data dataKey:(NSData *)key dataIv:(NSData *)iv;

三、RSA非对称加密

关于介绍,之前的博客已经给出,具体可以参考:网络安全——数据的加密与签名,RSA介绍

openssl 生成的密钥PEM文件为Base64编码(这里的Base64格式,长度超过64字符插有换行,生成的私钥为PKCS#1格式),下面是具体的openssl生成公私钥步骤:

  • 1 生成私钥,1024bit,PKCS1Padding格式,Base64编码
命令行:openssl genrsa -out rsa_private_key.pem 1024

结果如下:
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDOxoZIsFbFMeR0OWnc/sF5A3Gj0BWsoClQW3BKgvMQ85ZXVCM6
7g6XItl5sSW2EyMaIeQ8tRsM0HI4oCvlOMjSVgdyZmqbUfaZDoDYPW2pDbLqMDr/ o1eKxYpssbAyH6ZDyJeTOEu9yF7XUsIilokzc0D9i+uPc8yp/vLYTPDJEQIDAQAB AoGAFUMevcy8L2zQ9A6PTzU3Cc2L2u9juyuA9A1i/5Z1jhGuLO6u7Llb8LiZqkTH /u/61Q4VHRT2YhvxEteNi/WJ2L+1wTZYWbE/NIHBls4dTDt4aiMGUG2y6uBcFPmB 97sjT3ofcOHVZuFc80ktyhVuvx5osB8obZHbjn+3hn/pIF0CQQDx1bollu3XXL08 YJrS1mpB3F/87HXcxDa0dWUoqBRUCPjqC+8SuxaddPK6RFvkb1UyWJNzQ5Mb3OZt 65/sipdDAkEA2uMWf0ukTRhxiEYhZIJDSaERYeaWFU+mc6mC2//Tcvy7hldBe15n 7UQNKWl7DbI3Z7NmuKPa+rWqwASqtBAHGwJAOav7iW1V6Q8fvd9X7MHfczdn2LxX Wz+bwCti5XA38NZ27fHMoM3nFcPHAu68b1yxl6ESAOHzmihy93HCoLloWwJARodX j2rTJRhUNMHMLrOedNIWZMJE59cDXk9nX/X9rxZqYi4pZlQUDqqXxxk60j3zhlGT Lrl1bMUuoLKgQmbLswJAIfv1Vw18YcEexWPBkn5iKufu0Fo7+Z776lDLYP1kNyQZ eohofAAWYNQvHZ4WTpiIxi2FZ9xIRu+M7smsIs0h2g== -----END RSA PRIVATE KEY-----
  • 2 根据上面的私钥生成公钥
命令行:openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout

结果如下:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOxoZIsFbFMeR0OWnc/sF5A3Gj
0BWsoClQW3BKgvMQ85ZXVCM67g6XItl5sSW2EyMaIeQ8tRsM0HI4oCvlOMjSVgdy ZmqbUfaZDoDYPW2pDbLqMDr/o1eKxYpssbAyH6ZDyJeTOEu9yF7XUsIilokzc0D9 i+uPc8yp/vLYTPDJEQIDAQAB -----END PUBLIC KEY-----
  • 3 将私钥生成pkcs8格式,可在iOS工程中直接使用
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt

结果:
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAM7GhkiwVsUx5HQ5
adz+wXkDcaPQFaygKVBbcEqC8xDzlldUIzruDpci2XmxJbYTIxoh5Dy1GwzQcjig
K+U4yNJWB3JmaptR9pkOgNg9bakNsuowOv+jV4rFimyxsDIfpkPIl5M4S73IXtdS
wiKWiTNzQP2L649zzKn+8thM8MkRAgMBAAECgYAVQx69zLwvbND0Do9PNTcJzYva 72O7K4D0DWL/lnWOEa4s7q7suVvwuJmqRMf+7/rVDhUdFPZiG/ES142L9YnYv7XB NlhZsT80gcGWzh1MO3hqIwZQbbLq4FwU+YH3uyNPeh9w4dVm4VzzSS3KFW6/Hmiw HyhtkduOf7eGf+kgXQJBAPHVuiWW7ddcvTxgmtLWakHcX/zsddzENrR1ZSioFFQI +OoL7xK7Fp108rpEW+RvVTJYk3NDkxvc5m3rn+yKl0MCQQDa4xZ/S6RNGHGIRiFk gkNJoRFh5pYVT6ZzqYLb/9Ny/LuGV0F7XmftRA0paXsNsjdns2a4o9r6tarABKq0 EAcbAkA5q/uJbVXpDx+931fswd9zN2fYvFdbP5vAK2LlcDfw1nbt8cygzecVw8cC 7rxvXLGXoRIA4fOaKHL3ccKguWhbAkBGh1ePatMlGFQ0wcwus5500hZkwkTn1wNe T2df9f2vFmpiLilmVBQOqpfHGTrSPfOGUZMuuXVsxS6gsqBCZsuzAkAh+/VXDXxh wR7FY8GSfmIq5+7QWjv5nvvqUMtg/WQ3JBl6iGh8ABZg1C8dnhZOmIjGLYVn3EhG 74zuyawizSHa -----END PRIVATE KEY-----

可以在终端对"123"RSA加密,由于使用PKCS#1生成随机码,所以每次加密结果会不一样

echo "123" | openssl rsautl -encrypt  -inkey rsa_public_key.pem -pubin | Base64

加密结果(Base64):
ZDBtICMxy2JHg6QDqolyAeqBRMseqJQ33tYQRE26c69/dGlS3TJ2xzMRZlsww+NnQH48KVthyCJ6nIhgAvhmAOaG+MvMqhZT/G180euH3OfLX8/VcIWqelxm8IYzA3NRD8n2jWbWoxZHh8Sp3n+YM7vor+8Q3SsFXMuurwT+xPI=

例程RSA加密使用了第三方框架,链接如下:https://github.com/ideawu/Objective-C-RSA,在使用时公钥可以直接使用,私钥需要使用pkcs8格式。公私钥可以加-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----,也可以不加,程序会自动处理。

四、实际使用

选择哪种算法当然是根据自己的需求来定

  • 如果不是关键的数据可以使用DES加密,或者Base64编码不直接看到数据即可,这样速度快
  • 稍微重要的数据,可以用AES加密,一定要保护好密钥
  • 关于钱、用户登陆之类的比较重要,数据量也少,可以使用RSA加密

另外,我们也可以对称加密和非对称加密结合使用,对数据进行AES或DES加密,AES或DES的密钥随机生成,并使用RSA将其加密。对方收到信息后,先RSA解密得到密钥,然后在解密得到加密的数据。这样的话,随机算法就比较重要。

五、关于Padding

  • 数据长度

AES和DES在ECB或者CBC模式下,要加密的数据必须是分组长度的整数倍,比如AES是128位16字节,而DES是64位8字节,那么加密数据必须是16(AES)或者8(DES)的整数倍,如果不是那么就需要填充(pad)。

  • 密钥长度

不像数据长度必须是block的整数倍,密钥长度是固定的。

AES有三种:128、192、256bit

pad的方式有很多种,而且你也可以自定义,用的比较多的有PKCS7Padding、PKCS1Padding和PKCS5Padding。

  • PKCS7Padding:用十六进制0x07来填充,下面为一个简单的实现方法(其实很多加密工具已经实现,这里只是举个例子)
// plainData为要加密的数据,“16”是block大小
while (plainData.length % 16 != 0) {
    // PKCS7Padding模式
    Byte PKCS7Pad = 0x07; [plainData appendData:[[NSData alloc] initWithBytes:&PKCS7Pad length:1]]; }
  • PKCS5Padding:稍麻烦一点,比如需要填充7个字节就填充0x07,需要填充6个字节就是0x06。。。需要填充1个字节就是0x01

加解密双方必须使用相同的方式,不然解密就会失败。

关于电脑终端Openssl加密解密命令

对"123"加密,密钥为"30313233343536373839414243444546"(16进制,对应ASCII码为0~F),初始化向量为"30313233343536373839414243444546"(16进制,对应ASCII码为0~F)

echo -n "123" | openssl enc -aes-128-cbc -a -A -K 30313233343536373839414243444546 -iv 30313233343536373839414243444546

下面对参数做说明:

  • echo -n "123" |:输出123且不换行,“|”是管道符号,将前面的输出作为后面的输入,即"123"作为后面要加密的数据。openssl命令是对文件加密,这样做好处是直接可以对字符串加密。
  • enc:对称加密
  • -aes-128-cbc:算法名字模式
  • -a:加密结果进行base64编码
  • -A:输出不换行,默认情况下,base64编码结果换行
  • -K:后面跟密钥,16进制形式
  • -iv:初始化向量(CBC模式有)

 

网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希

 

据说今天520是个好日子,为什么我想起的是502、500、404这些?还好服务器没事!

一、Base64编码

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式,这样每一个字节的有效位为6位,则取值范围0~630 ~ (2^6 - 1)。如果最后剩下的字符不到3个字节,则用0填充,输出字符使用'=',因此我们看到Base64末尾会有1到2个'='。另外标准还要求每76个字符要插入换行(不过,这个视具体情况定)。

iOS7之后苹果有自己的Base64编码解码API,NSData的扩展:NSData (NSDataBase64Encoding)

两种存储方式
  • 可见字符串形式

为了保证所输出的每一个编码字节都是可读字符,而不是0~63这些数字,Base64制作了一个码表,就像ASCII码表一样,每一个Base64码值都有对应的字符。64个可读字符从0到63非别是A-Z、a-z、0-9、+、/,这也是Base64名字的由来。

  • 以16进制形式

即NSData形式保存,Base64编码结果为字符,而这些字符又对应ASCII码表的码值,NSData就是存储ASCII码表的码值。

下面举个例子,并以苹果提供的API来详细介绍Base64编码解码过程:

假设我们对字符串"123"进行Base64编码,"123"对应的16进制是313233,二进制为00110001、00110010、00110011,将其变为4*6结果即下表中的第一行。然后根据Base64的码表,它们分别对应表中的第二行。那么"123"编码的最终结果即为MTIz,以字符串的形式保存。然后根据MTIz对应ASCII码值,以NSData形式存储,如表中的第三行。

转换为4*6结果00001100000100110000100000110011
Base64对应字符MTIz
对应ASCII码值(16进制)4d54497a

上面的过程通过代码实现如下:

// 1 待编码的原始字符串
NSString *plainStr = @"123";
// 2 将其转换成NSData保存,那么"123"对应的ASCII码表码值是31、32、33(16进制)
NSData *plainData = [plainStr dataUsingEncoding:NSUTF8StringEncoding]; // 3.1 将其进行Base64编码,且结果以字符串形式保存,对应表中的第二行 NSString *baseStr = [plainData base64EncodedStringWithOptions:0]; // 3.2 将其进行Base64编码,且结果以NSData形式保存 NSData *base64Data = [plainData base64EncodedDataWithOptions:0];

另外对于参数NSDataBase64EncodingOptions选项,有多种取值

  • NSDataBase64Encoding64CharacterLineLength:每64个字符插入\r或\n
  • NSDataBase64Encoding76CharacterLineLength:每76个字符插入\r或\n,标准中有要求是76个字符要换行,不过具体还是自己定
  • NSDataBase64EncodingEndLineWithCarriageReturn:插入字符为\r
  • NSDataBase64EncodingEndLineWithLineFeed:插入字符为\n

前两个选项为是否允许插入字符,以及多少个字符长度插入,两个可以选其一或者都不选。后两个选项代表要插入的具体字符。比如我们想76个字符后插入一个\r则可以NSDataBase64Encoding76CharacterLineLength | NSDataBase64EncodingEndLineWithCarriageReturn。而在上面举的例子中选项为0,则代表不插入字符。

第三方框架

在iOS7之前我们一般用的都是第三方框架,比如nicklockwood写的https://github.com/nicklockwood/Base64还有Google的GTMBase64,虽然苹果有了自己的实现,但是许多其它的加密框架都用到了它,所以还是要了解一下,另外它还提供任意长度字符插入\r\n,而苹果只能是64或76长度。

二、MD5、SHA1、SHA256、SHA512、HMAC实现

主要用于验证,防止信息被修改。介绍请参照http://www.jianshu.com/p/003b85fd3e36

具体的实现参考第三方框架:https://github.com/kelp404/CocoaSecurity。非常全面,不过不是太方便,比如想要获得MD5结果

NSString *plainStr = @"123";
CocoaSecurityResult *md5 = [CocoaSecurity md5:plainStr];
// 获取md5结果
NSString *md5Str = md5.hexLower;

不能直接plainStr.MD5Hash就获得字符串形式的结果,这里我封装了一个,可以参见工程中的NSString+Hash类https://github.com/mddios/EncryptionTools,可以直接对字符串进行操作,类似plainStr.MD5Hash、plainStr.sha1Hash···plainStr.sha256Hash···,非常方便。

比如对@"123"哈希,下面用上面提到的两种方法举例:

- (void)hashTest {
    NSString *plainStr = @"123";
    // md5
    CocoaSecurityResult *md5 = [CocoaSecurity md5:plainStr];
    NSLog(@"md5:%lu---%@---%@",plainStr.md5Hash.length, plainStr.md5Hash,md5.hex); // 40 CocoaSecurityResult *sha1 = [CocoaSecurity sha1:plainStr]; NSLog(@"sha1:%lu---%@---%@",plainStr.sha1Hash.length, plainStr.sha1Hash,sha1.hex); // 56 CocoaSecurityResult *sha224 = [CocoaSecurity sha224:plainStr]; NSLog(@"sha224:%lu---%@---%@",plainStr.sha224Hash.length,plainStr.sha224Hash,sha224.hex); // 64 CocoaSecurityResult *sha256 = [CocoaSecurity sha256:plainStr]; NSLog(@"sha256:%lu---%@---%@",plainStr.sha256Hash.length,plainStr.sha256Hash,sha256.hex); // 96 CocoaSecurityResult *sha384 = [CocoaSecurity sha384:plainStr]; NSLog(@"sha384:%lu---%@---%@",plainStr.sha384Hash.length,plainStr.sha384Hash,sha384.hex); // 128 CocoaSecurityResult *sha512 = [CocoaSecurity sha512:plainStr]; NSLog(@"sha512:%lu---%@---%@",plainStr.sha512Hash.length,plainStr.sha512Hash,sha512.hex); // hmac CocoaSecurityResult *hmacmd5 = [CocoaSecurity hmacMd5:plainStr hmacKey:plainStr]; NSLog(@"hmacmd5:%lu---%@---%@",[plainStr hmacMD5WithKey:plainStr].length,[plainStr hmacMD5WithKey:plainStr],hmacmd5.hex); }
  • 在电脑终端来获取结果

封装的代码中NSString+Hash.h头文件,有具体列出终端命令方法,如下:

/// 返回结果:32长度   终端命令:md5 -s "123"
- (NSString *)md5Hash;

/// 返回结果:40长度   终端命令:echo -n "123" | openssl sha -sha1
- (NSString *)sha1Hash;

/// 返回结果:56长度 终端命令:echo -n "123" | openssl sha -sha224 - (NSString *)sha224Hash; /// 返回结果:64长度 终端命令:echo -n "123" | openssl sha -sha256 - (NSString *)sha256Hash; /// 返回结果:96长度 终端命令:echo -n "123" | openssl sha -sha384 - (NSString *)sha384Hash; /// 返回结果:128长度 终端命令:echo -n "123" | openssl sha -sha512 - (NSString *)sha512Hash; #pragma mark - HMAC /// 返回结果:32长度 终端命令:echo -n "123" | openssl dgst -md5 -hmac "123" - (NSString *)hmacMD5WithKey:(NSString *)key; /// 返回结果:40长度 echo -n "123" | openssl sha -sha1 -hmac "123" - (NSString *)hmacSHA1WithKey:(NSString *)key; - (NSString *)hmacSHA224WithKey:(NSString *)key; - (NSString *)hmacSHA256WithKey:(NSString *)key; - (NSString *)hmacSHA384WithKey:(NSString *)key; - (NSString *)hmacSHA512WithKey:(NSString *)key;
  • 关于MD5加盐,只是多了下面第一行
plainStr = [plainStr stringByAppendingString:salt];
NSString *md5Str = plainStr.md5Hash;

github代码下载地址

https://github.com/mddios/EncryptionTools

转载于:https://www.cnblogs.com/klb561/p/9033883.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
里提供了三种Python中常用的加密解密字符串的方法:DESRSAAES。 1. DES加密解密: 使用Crypto.Cipher库中的DES模块,需要注意的是,密钥必须为8位或16位bytes类型,加密文本必须为8的倍数。具体代码实现可以参考引用中的DesUtil类。 2. RSA加密解密: 使用rsa库进行加密解密,需要生成公钥和私钥,具体代码实现可以参考引用中的rsacrypt类。 3. AES加密解密: 使用pycryptodome库中的AES模块,需要注意的是,密钥必须为16、24或32位bytes类型,加密文本可以为任意长度。具体代码实现可以参考以下示例: ``` from Crypto.Cipher import AES import base64 class AesUtil(): """ AES加密解密 """ key = b'1234567890123456' # 密钥 16、24或32位bytes类型 iv = b'1234567890123456' # 初始向量 16位bytes类型 def __init__(self): self.aes = AES.new(self.key, AES.MODE_CBC, self.iv) # 创建一个AES实例 def pad(self, text): """ 加密函数,如果text不是16的倍数,那就补足为16的倍数 :param text: :return: """ while len(text) % 16 != 0: text += b' ' return text def encrypt(self, text): padded_text = self.pad(text) encrypted_text = self.aes.encrypt(padded_text) # 把加密后的字符串转化为base64编码的字符串 return base64.b64encode(encrypted_text).decode() def decrypt(self, text): # 先把base64编码的字符串转化为bytes类型 encrypted_text = base64.b64decode(text.encode()) decrypted_text = self.aes.decrypt(encrypted_text).rstrip(b' ') return decrypted_text.decode() aes = AesUtil() enc = aes.encrypt(b"我是一个兵!") print("加密后:%s" % enc) dec = aes.decrypt(enc) print("解密后:%s" % dec) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值