AES加解密以及原始碼分析

2021-10-05 15:44:13 字數 2822 閱讀 6296

aes加解密簡單實現

//金鑰

private static string secretkey = "12345678123456781234567812345678";

//加密串字元編碼方式

private static string charset = "utf8";

//偏移量

private static int offset = 16;

//演算法(aes)、工作模式(cbc)、填充方式(pkcs5padding)

private static string transformation = "aes/cbc/pkcs5padding";

//演算法

private static string algorithm = "aes";

/***@desc: 加密

**@date: 10:19

*/public static string encrypt(string content)

/***@desc: 解密

**@date: 10:18

*/public static string decrypt(string content)

/***@desc: 帶金鑰加密

**@date: 10:19

*/public static string encrypt(string content,string secretkey) catch (exception e) ",e);

}return null;

}/**

*@desc: 帶金鑰解密

**@date: 10:20

*/public static string decrypt(string content,string secretkey) catch (exception e) ",e);

}return null;

} /**

*@desc: 獲取cipher密碼管理器

**@date: 11:04

*/public static cipher getcipher(int type,string secretkey) throws exception

public static void main(string args)

下面是幫助理解aes加解密演算法的原始碼方法:

這個方法在cipher類中,將var0轉換為我們使用的演算法(aes)、工作模式(cbc)、填充方式(pkcs5padding)

private static listgettransforms(string var0) throws nosuchalgorithmexception 

if (var4 != null && var4.length() == 0)

if (var3 == null && var4 == null) else

這倆方法在aescipher和ciphercore類中,可以看出pkcs5padding填充塊大小blocksize為固定16

protected aescipher(int var1) 

ciphercore(symmetriccipher var1, int var2)

此方法在ciphercore 類中,根據工作模式設定相應的密碼管理器

void setmode(string var1) throws nosuchalgorithmexception  else  else if (var2.equals("cts"))  else if (var2.equals("ctr"))  else if (var2.equals("gcm")) 

this.ciphermode = 7;

this.cipher = new galoiscountermode(var3);

this.padding = null;

} else if (var2.startswith("cfb")) else if (var2.startswith("ofb")) else

this.ciphermode = 4;

this.cipher = new pcbc(var3);}}

}}

此方法在cipher類中,設定填充方式

void setmodepadding(cipherspi var1) throws nosuchalgorithmexception, nosuchpaddingexception 

if (this.pad != null)

}

此方法在ivparameterspec類中,可以看出向量不能小於偏移量長度

public ivparameterspec(byte var1, int var2, int var3)  else if (var1.length - var2 < var3)  else if (var3 < 0)  else 

}

在aescrypt類和aesconstants 介面中,可以判斷出金鑰長度是否合理

static final boolean iskeysizevalid(int var0) 

}return false;

}//aes要塊大小,以及aes金鑰要求的長度型別

inte***ce aesconstants ;

}

此方法在ciphercore類中,可以判斷出向量長度是否合理

else if (var3 instanceof ivparameterspec) 

}

AES對稱加解密

python實現aes對稱加解密 關於aes對稱加密的概念網上很多,在此不在贅述,直接上 import base64 from crypto.cipher import aes aes加密解密工具類 資料塊128位 key 為16位 iv 為16位 aes加密模式為cbc 填充 pkcs7paddi...

AES 對稱加解密

1.生成aes key aes根據密碼生成key param password return public static key createkey string password catch exception e return null 2.aes加密 ecb模式 aes加密操作,使用ecb模式...

AES加解密(對稱)

aes是一種對稱的加密和解密的演算法,其用法如下 package com.zys.demo.util import lombok.extern.slf4j.slf4j import j ax.crypto.cipher import j ax.crypto.spec.ivparameterspec ...