加密代码
AES加密算法c语言实现代码
/*密钥置换1*/ int DES_PC1_Transform(ElemType key[64], ElemType tempbts[56]){ int cnt; for(cnt = 0; cnt < 56; cnt++){
AES加密算法c语言实现代码
/*将二进制位串转为长度为8的字符串*/ int Bit64ToChar8(ElemType bit[64],ElemType ch[8]){ int cnt; memset(ch,0,8); for(cnt = 0; cnt < 8; cnt++){
BitToByte(bit+(cnt<<3),ch+cnt); } return 0; }
/*扩充置换表E*/ int E_Table[48] = {31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, 7, 8,9,10,11,12, 11,12,13,14,15,16, 15,16,17,18,19,20, 19,20,21,22,23,24, 23,24,25,26,27,28, 27,28,29,30,31, 0};
/*对左移次数的规定*/ int MOVE_TIMES[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
int ByteToBit(ElemType ch,ElemType bit[8]); int BitToByte(ElemType bit[8],ElemType *ch); int Char8ToBit64(ElemType ch[8],ElemType bit[64]); int Bit64ToChar8(ElemType bit[64],ElemType ch[8]); int DES_MakeSubKeys(ElemType key[64],ElemType subKeys[16][48]); int DES_PC1_Transform(ElemType key[64], ElemType tempbts[56]); int DES_PC2_Transform(ElemType key[56], ElemType tempbts[48]); int DES_ROL(ElemType data[56], int time); int DES_IP_Transform(ElemType data[64]); int DES_IP_1_Transform(ElemType data[64]); int DES_E_Transform(ElemType data[48]); int DES_P_Transform(ElemType data[32]); int DES_SBOX(ElemType data[48]); int DES_XOR(ElemType R[48], ElemType L[48],int count); int DES_Swap(ElemType left[32],ElemType right[32]); int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]); int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[16][48], ElemType plainBlock[8]); int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile); int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile);
des加密算法java代码
des加密算法java代码1、DES加密算法Java实现(1)导入所需要的包:import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;(2)定义加密算法:public class DesEncrypter {Cipher ecipher;Cipher dcipher;public DesEncrypter(String passPhrase) {try {// Create the keyDESKeySpec keySpec = newDESKeySpec(passPhrase.getBytes('UTF8'));SecretKeyFactory keyFactory =SecretKeyFactory.getInstance('DES');SecretKey key = keyFactory.generateSecret(keySpec); // Create the cipherecipher = Cipher.getInstance('DES');dcipher = Cipher.getInstance('DES');// Initialize the cipher for encryptionecipher.init(Cipher.ENCRYPT_MODE, key);// Initialize the same cipher for decryption dcipher.init(Cipher.DECRYPT_MODE, key);} catch (Exception e) {}}(3)定义加密函数:public String encrypt(String str) {try {// Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes('UTF8');// Encryptbyte[] enc = ecipher.doFinal(utf8);// Encode bytes to base64 to get a stringreturn new sun.misc.BASE64Encoder().encode(enc);} catch (Exception e) {}return null;}(4)定义解密函数:// Decryptpublic String decrypt(String str) {try {// Decode base64 to get bytesbyte[] dec = newsun.misc.BASE64Decoder().decodeBuffer(str);// Decryptbyte[] utf8 = dcipher.doFinal(dec);// Decode using utf-8return new String(utf8, 'UTF8');} catch (Exception e) {}return null;}}(5)定义测试类,测试加密解之密是否正确:public class TestDes {public static void main(String[] args) {try {// Create encrypter/decrypter classDesEncrypter encrypter = new DesEncrypter('your key');// EncryptString encrypted = encrypter.encrypt('Don't tell anybody!');// DecryptString decrypted = encrypter.decrypt(encrypted);// Print out valuesSystem.out.println('Encrypted: ' + encrypted);System.out.println('Decrypted: ' + decrypted);} catch (Exception e) {}}}。
代码加密方法
代码加密方法一、代码加密概述代码加密是一种通过特定的算法和技术,将计算机代码转换为不可读或难以理解的形式,以保护代码的机密性和完整性,防止未经授权的访问和篡改。
代码加密在软件开发、网络安全、数据保护等领域具有广泛的应用价值。
二、代码加密的分类1.对称加密算法对称加密算法是指加密和解密使用相同密钥的加密算法。
常见的对称加密算法有DES(Data Encryption Standard)算法、AES(Advanced Encryption Standard)算法、IDEA(International Data Encryption Algorithm)算法、Blowfish算法等。
这些算法在加密和解密过程中具有较高的运算效率和安全性,适用于大量数据的加密和解密。
2.非对称加密算法非对称加密算法是指加密和解密使用不同密钥的加密算法。
常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)算法、ECC(Elliptic Curve Cryptography)算法、DSA(Digital Signature Algorithm)算法、Diffie-Hellman算法等。
这些算法在密钥管理上具有更高的安全性,适用于安全通信和数字签名等应用场景。
3.哈希算法哈希算法是一种将任意长度的数据映射为固定长度散列值的算法。
常见的哈希算法有MD5(Message Digest Algorithm 5)、SHA系列算法(Secure HashAlgorithm)、SHA-3算法、Whirlpool算法等。
这些算法在数据完整性验证和防止篡改方面具有重要作用,适用于数据存储和传输过程中的安全保护。
4.数字签名算法数字签名算法是一种用于验证数字消息来源和完整性的算法。
常见的数字签名算法有RSA签名算法、DSA签名算法、ECDSA(Elliptic Curve Digital Signature Algorithm)签名算法、EdDSA签名算法等。
php数字加密与解密代码
php数字加密与解密代码PHP数字加密与解密是一种常见的数据处理技术,可以保护敏感信息的安全性。
本文将介绍一种基于PHP的数字加密与解密方法,帮助读者更好地理解和应用这一技术。
一、加密方法在PHP中,数字加密可以通过使用内置的加密函数实现。
常用的加密函数包括md5()、sha1()和password_hash()等。
这些函数可以将数字转换为一串看起来随机的字符,从而实现加密的效果。
例如,可以使用md5()函数对数字进行加密,代码如下:```$number = 123456;$encrypted_number = md5($number);echo $encrypted_number;```运行以上代码,将输出一串长度为32的字符,即为加密后的结果。
二、解密方法解密加密后的数字通常是不可行的,因为加密是一种不可逆的操作。
然而,可以使用其他方法来验证加密后的数字是否与原始数字一致。
例如,可以使用md5()函数对输入的数字进行加密,并将结果与之前加密的结果进行比较,代码如下:```$number = 123456;$encrypted_number = md5($number);$input_number = 123456;if ($encrypted_number === md5($input_number)) {echo "数字验证通过";} else {echo "数字验证失败";}```运行以上代码,如果输入的数字与原始数字一致,则输出"数字验证通过",否则输出"数字验证失败"。
三、注意事项在使用数字加密与解密的过程中,需要注意以下几点:1. 加密后的结果是固定长度的字符串,无法还原为原始数字。
2. 加密算法的选择应根据具体需求,例如md5()函数适用于简单的加密需求,而password_hash()函数适用于更高级的加密需求。
混合加密的python代码
混合加密的python代码混合加密的Python代码在计算机安全领域,加密是一个重要的技术,它可以保护数据的隐私和自身的完整性。
在加密领域里,混合加密算法是一种常用的加密方式,它采用了对称加密和非对称加密相结合的方式,使得加密算法更加安全和可靠。
在本文中,我们将为您介绍混合加密的Python代码,并按照类别进行划分。
对称加密对称加密是一种能够保证数据机密性的加密算法,该算法使用相同的密钥对明文进行加密和密文进行解密。
在Python中,使用PyCryptodome库可以实现对称加密。
以下是使用PyCryptodome库实现对称加密的Python代码:```pythonfrom Crypto.Cipher import AESfrom Crypto.Random import get_random_bytesdata = b'hello, world!'key = get_random_bytes(16)cipher = AES.new(key, AES.MODE_EAX)ciphertext, tag = cipher.encrypt_and_digest(data)print('Key:', key)print('Cipher-text:', ciphertext)print('Tag:', tag)```以上代码使用了AES对称加密算法,其中`get_random_bytes(16)`生成了一个16字节的随机密钥。
`AES.new`函数创建了一个AES加密对象,并使用生成的随机密钥和EAX模式来加密数据。
输出结果中,`Cipher-text`就是加密后的密文。
非对称加密非对称加密是一种使用公钥加密、私钥解密的加密方式。
在这种加密算法中,公钥是公开的,任何人都可以使用公钥对数据进行加密,而只有私钥的持有者才能够解密数据。
在Python中,使用pycryptodome库可以实现非对称加密。
加密解密方式代码
加密解密⽅式代码public class EncodePassword {// (1)加密算法有:AES,DES,DESede(DES3)和RSA 四种// (2) 模式有CBC(有向量模式)和ECB(⽆向量模式),向量模式可以简单理解为偏移量,使⽤CBC模式需要定义⼀个IvParameterSpec对象// (3) 填充模式:// * NoPadding: 加密内容不⾜8位⽤0补⾜8位, Cipher类不提供补位功能,// 需⾃⼰实现代码给加密内容添加0, 如{65,65,65,0,0,0,0,0}// * PKCS5Padding: 加密内容不⾜8位⽤余位数补⾜8位,// 如{65,65,65,5,5,5,5,5}或{97,97,97,97,97,97,2,2}; 刚好8位补8位8// private static final String ENCODE_TYPE = "AES/CBC/PKCS5Padding"; "算法/模式/填充模式"//指定算法private static final String ENCODE_TYPE = "AES";//salt 盐值,⽤于⽣成密钥private static final String publicKey = "s7WKkt@zqJO+wVdW";public static void main(String[] args) throws Exception {getSecretKey();System.out.println("============AES对称加密⽅式================");String aesEncode = testAESEncode("wo6ai8zhong6guo"); // 加密后的密码String aesDecode = testAESDecode(publicKey, aesEncode);System.out.println("解密后的密码:"+aesDecode);// System.out.println("============Base64提供的加密⽅式(可逆)================");// testBase64Encode();// System.out.println("============spring-security-core提供的加密⽅式================");// testBCryptEncode();}// ⽣成密钥private static void getSecretKey() throws NoSuchAlgorithmException {// 通过 KeyGenerator创建秘密密匙 128、192和256位KeyGenerator keyGenerator = KeyGenerator.getInstance(ENCODE_TYPE);keyGenerator.init(128);SecretKey keySpec = keyGenerator.generateKey();byte[] encoded = keySpec.getEncoded(); //密钥String str = Base64.getEncoder().encodeToString(encoded);System.out.println("KeyGenerator:"+str);SecretKey secretKey = new SecretKeySpec(publicKey.getBytes(), ENCODE_TYPE);byte[] encoded1 = secretKey.getEncoded();System.out.println(encoded1.toString());String str1 = Base64.getEncoder().encodeToString(encoded1);System.out.println("SecretKeySpec:"+str1);}/* AES加密数据块和密钥长度可以是128⽐特、192⽐特、256⽐特中的任意⼀个。
加密系列MD5加密和解密算法详解代码示例
加密系列MD5加密和解密算法详解代码示例MD5加密算法是一种广泛应用的密码加密算法,它将任意长度的数据映射为固定长度的128位哈希值。
MD5加密算法是不可逆的,即通过密文无法还原得到原始数据。
MD5加密算法的实现可以通过编写代码来完成。
下面是一个示例的MD5加密算法的代码:```import hashlibdef md5_encrypt(data):md5 = hashlib.md5md5.update(data.encode('utf-8'))return md5.hexdigestif __name__ == '__main__':data = input("请输入需要加密的数据:")encrypted_data = md5_encrypt(data)print("加密结果为:", encrypted_data)```以上代码实现了一个简单的MD5加密算法。
首先导入了`hashlib`模块,该模块提供了一系列用于数据加密的算法,包括MD5算法。
`md5_encrypt`函数接收一个字符串作为输入数据,并将其转换为字节流形式,然后使用`hashlib.md5`方法创建了一个MD5对象。
接着,通过调用MD5对象的`update`方法将输入数据添加到加密流程中。
最后,通过调用MD5对象的`hexdigest`方法获得加密后的结果,并将其返回。
在`if __name__ == '__main__'`下方的代码段中,首先获取用户输入的数据,然后调用`md5_encrypt`函数对其进行加密,并将结果打印到控制台。
下面是MD5解密算法的示例代码:```import hashlibdef md5_decrypt(encrypted_data):md5 = hashlib.md5md5.update(encrypted_data.encode('utf-8'))return md5.hexdigestif __name__ == '__main__':encrypted_data = input("请输入需要解密的数据:")decrypted_data = md5_decrypt(encrypted_data)print("解密结果为:", decrypted_data)```以上代码实现了一个简单的MD5解密算法。
AES加密C语言实现代码
#define BPOLY 0x1b //!< Lower 8 bits of (x^8+x^4+x^3+x+1), ie. (x^4+x^3+x+1).#define BLOCKSIZE 16 //!< Block size in number of bytes.#define KEY_COUNT 3#if KEY_COUNT == 1#define KEYBITS 128 //!< Use AES128.#elif KEY_COUNT == 2#define KEYBITS 192 //!< Use AES196.#elif KEY_COUNT == 3#define KEYBITS 256 //!< Use AES256.#else#error Use 1, 2 or 3 keys!#endif#if KEYBITS == 128#define ROUNDS 10 //!< Number of rounds.#define KEYLENGTH 16 //!< Key length in number of bytes.#elif KEYBITS == 192#define ROUNDS 12 //!< Number of rounds.#define KEYLENGTH 24 //!< // Key length in number of bytes.#elif KEYBITS == 256#define ROUNDS 14 //!< Number of rounds.#define KEYLENGTH 32 //!< Key length in number of bytes.#else#error Key must be 128, 192 or 256 bits!#endif#define EXPANDED_KEY_SIZE (BLOCKSIZE * (ROUNDS+1)) //!< 176, 208 or 240 bytes.unsigned char AES_Key_Table[32] ={0xd0, 0x94, 0x3f, 0x8c, 0x29, 0x76, 0x15, 0xd8,0x20, 0x40, 0xe3, 0x27, 0x45, 0xd8, 0x48, 0xad,0xea, 0x8b, 0x2a, 0x73, 0x16, 0xe9, 0xb0, 0x49,0x45, 0xb3, 0x39, 0x28, 0x0a, 0xc3, 0x28, 0x3c,};unsigned char block1[256]; //!< Workspace 1.unsigned char block2[256]; //!< Worksapce 2.unsigned char tempbuf[256];unsigned char *powTbl; //!< Final location of exponentiation lookup table.unsigned char *logTbl; //!< Final location of logarithm lookup table. unsigned char *sBox; //!< Final location of s-box.unsigned char *sBoxInv; //!< Final location of inverse s-box. unsigned char *expandedKey; //!< Final location of expanded key.void CalcPowLog(unsigned char *powTbl, unsigned char *logTbl) {unsigned char i = 0;unsigned char t = 1;do {// Use 0x03 as root for exponentiation and logarithms.powTbl[i] = t;logTbl[t] = i;i++;// Muliply t by 3 in GF(2^8).t ^= (t << 1) ^ (t & 0x80 ? BPOLY : 0);}while( t != 1 ); // Cyclic properties ensure that i < 255.powTbl[255] = powTbl[0]; // 255 = '-0', 254 = -1, etc.}void CalcSBox( unsigned char * sBox ){unsigned char i, rot;unsigned char temp;unsigned char result;// Fill all entries of sBox[].i = 0;do {//Inverse in GF(2^8).if( i > 0 ){temp = powTbl[ 255 - logTbl[i] ];}else{temp = 0;}// Affine transformation in GF(2).result = temp ^ 0x63; // Start with adding a vector in GF(2).for( rot = 0; rot < 4; rot++ ){// Rotate left.temp = (temp<<1) | (temp>>7);// Add rotated byte in GF(2).result ^= temp;}// Put result in table.sBox[i] = result;} while( ++i != 0 );}void CalcSBoxInv( unsigned char * sBox, unsigned char * sBoxInv ) {unsigned char i = 0;unsigned char j = 0;// Iterate through all elements in sBoxInv using i.do {// Search through sBox using j.do {// Check if current j is the inverse of current i.if( sBox[ j ] == i ){// If so, set sBoxInc and indicate search finished.sBoxInv[ i ] = j;j = 255;}} while( ++j != 0 );} while( ++i != 0 );}void CycleLeft( unsigned char * row ){// Cycle 4 bytes in an array left once.unsigned char temp = row[0];row[0] = row[1];row[1] = row[2];row[2] = row[3];row[3] = temp;}void InvMixColumn( unsigned char * column ){unsigned char r0, r1, r2, r3;r0 = column[1] ^ column[2] ^ column[3];r1 = column[0] ^ column[2] ^ column[3];r2 = column[0] ^ column[1] ^ column[3];r3 = column[0] ^ column[1] ^ column[2];column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? BPOLY : 0);column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? BPOLY : 0);column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? BPOLY : 0);column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? BPOLY : 0);r0 ^= column[0] ^ column[1];r1 ^= column[1] ^ column[2];r2 ^= column[2] ^ column[3];r3 ^= column[0] ^ column[3];column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? BPOLY : 0);column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? BPOLY : 0);column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? BPOLY : 0);column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? BPOLY : 0);r0 ^= column[0] ^ column[2];r1 ^= column[1] ^ column[3];r2 ^= column[0] ^ column[2];r3 ^= column[1] ^ column[3];column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? BPOLY : 0);column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? BPOLY : 0);column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? BPOLY : 0);column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? BPOLY : 0);column[0] ^= column[1] ^ column[2] ^ column[3];r0 ^= column[0];r1 ^= column[0];r2 ^= column[0];r3 ^= column[0];column[0] = r0;column[1] = r1;column[2] = r2;column[3] = r3;}void SubBytes( unsigned char * bytes, unsigned char count ){do {*bytes = sBox[ *bytes ]; // Substitute every byte in state.bytes++;} while( --count );}void InvSubBytesAndXOR( unsigned char * bytes, unsigned char * key, unsigned char count ){do {// *bytes = sBoxInv[ *bytes ] ^ *key; // Inverse substitute every byte in state and add key.*bytes = block2[ *bytes ] ^ *key; // Use block2 directly. Increases speed.bytes++;key++;} while( --count );}void InvShiftRows( unsigned char * state ){unsigned char temp;// Note: State is arranged column by column.// Cycle second row right one time.temp = state[ 1 + 3*4 ];state[ 1 + 3*4 ] = state[ 1 + 2*4 ];state[ 1 + 2*4 ] = state[ 1 + 1*4 ];state[ 1 + 1*4 ] = state[ 1 + 0*4 ];state[ 1 + 0*4 ] = temp;// Cycle third row right two times.temp = state[ 2 + 0*4 ];state[ 2 + 0*4 ] = state[ 2 + 2*4 ];state[ 2 + 2*4 ] = temp;temp = state[ 2 + 1*4 ];state[ 2 + 1*4 ] = state[ 2 + 3*4 ];state[ 2 + 3*4 ] = temp;// Cycle fourth row right three times, ie. left once.temp = state[ 3 + 0*4 ];state[ 3 + 0*4 ] = state[ 3 + 1*4 ];state[ 3 + 1*4 ] = state[ 3 + 2*4 ];state[ 3 + 2*4 ] = state[ 3 + 3*4 ];state[ 3 + 3*4 ] = temp;}void InvMixColumns( unsigned char * state ){InvMixColumn( state + 0*4 );InvMixColumn( state + 1*4 );InvMixColumn( state + 2*4 );InvMixColumn( state + 3*4 );}void XORBytes( unsigned char * bytes1, unsigned char * bytes2, unsigned char count ) {do {*bytes1 ^= *bytes2; // Add in GF(2), ie. XOR.bytes1++;bytes2++;} while( --count );}void CopyBytes( unsigned char * to, unsigned char * from, unsigned char count ) {do {*to = *from;to++;from++;} while( --count );}void KeyExpansion( unsigned char * expandedKey ){unsigned char temp[4];unsigned char i;unsigned char Rcon[4] = { 0x01, 0x00, 0x00, 0x00 }; // Round constant.unsigned char * key = AES_Key_Table;// Copy key to start of expanded key.i = KEYLENGTH;do {*expandedKey = *key;expandedKey++;key++;} while( --i );// Prepare last 4 bytes of key in temp.expandedKey -= 4;temp[0] = *(expandedKey++);temp[1] = *(expandedKey++);temp[2] = *(expandedKey++);temp[3] = *(expandedKey++);// Expand key.i = KEYLENGTH;while( i < BLOCKSIZE*(ROUNDS+1) ){// Are we at the start of a multiple of the key size?if( (i % KEYLENGTH) == 0 ){CycleLeft( temp ); // Cycle left once.SubBytes( temp, 4 ); // Substitute each byte.XORBytes( temp, Rcon, 4 ); // Add constant in GF(2).*Rcon = (*Rcon << 1) ^ (*Rcon & 0x80 ? BPOLY : 0);}// Keysize larger than 24 bytes, ie. larger that 192 bits?#if KEYLENGTH > 24// Are we right past a block size?else if( (i % KEYLENGTH) == BLOCKSIZE ) {SubBytes( temp, 4 ); // Substitute each byte.}#endif// Add bytes in GF(2) one KEYLENGTH away.XORBytes( temp, expandedKey - KEYLENGTH, 4 );// Copy result to current 4 bytes.*(expandedKey++) = temp[ 0 ];*(expandedKey++) = temp[ 1 ];*(expandedKey++) = temp[ 2 ];*(expandedKey++) = temp[ 3 ];i += 4; // Next 4 bytes.}}void InvCipher( unsigned char * block, unsigned char * expandedKey ) {unsigned char round = ROUNDS-1;expandedKey += BLOCKSIZE * ROUNDS;XORBytes( block, expandedKey, 16 );expandedKey -= BLOCKSIZE;do {InvShiftRows( block );InvSubBytesAndXOR( block, expandedKey, 16 );expandedKey -= BLOCKSIZE;InvMixColumns( block );} while( --round );InvShiftRows( block );InvSubBytesAndXOR( block, expandedKey, 16 );}void aesDecInit(void){powTbl = block1;logTbl = block2;CalcPowLog( powTbl, logTbl );sBox = tempbuf;CalcSBox( sBox );expandedKey = block1;KeyExpansion( expandedKey );sBoxInv = block2; // Must be block2.CalcSBoxInv( sBox, sBoxInv );}void aesDecrypt( unsigned char * buffer, unsigned char * chainBlock ) {unsigned char temp[ BLOCKSIZE ];CopyBytes( temp, buffer, BLOCKSIZE );InvCipher( buffer, expandedKey );XORBytes( buffer, chainBlock, BLOCKSIZE );CopyBytes( chainBlock, temp, BLOCKSIZE );}unsigned char Multiply( unsigned char num, unsigned char factor ){unsigned char mask = 1;unsigned char result = 0;while( mask != 0 ){// Check bit of factor given by mask.if( mask & factor ){// Add current multiple of num in GF(2).result ^= num;}// Shift mask to indicate next bit.mask <<= 1;// Double num.num = (num << 1) ^ (num & 0x80 ? BPOLY : 0);}return result;}unsigned char DotProduct( unsigned char * vector1, unsigned char * vector2 ) {unsigned char result = 0;result ^= Multiply( *vector1++, *vector2++ );result ^= Multiply( *vector1++, *vector2++ );result ^= Multiply( *vector1++, *vector2++ );result ^= Multiply( *vector1 , *vector2 );return result;}void MixColumn( unsigned char * column ){unsigned char row[8] = {0x02, 0x03, 0x01, 0x01, 0x02, 0x03, 0x01, 0x01};// Prepare first row of matrix twice, to eliminate need for cycling.unsigned char result[4];// Take dot products of each matrix row and the column vector.result[0] = DotProduct( row+0, column );result[1] = DotProduct( row+3, column );result[2] = DotProduct( row+2, column );result[3] = DotProduct( row+1, column );// Copy temporary result to original column.column[0] = result[0];column[1] = result[1];column[2] = result[2];column[3] = result[3];}void MixColumns( unsigned char * state ){MixColumn( state + 0*4 );MixColumn( state + 1*4 );MixColumn( state + 2*4 );MixColumn( state + 3*4 );}void ShiftRows( unsigned char * state ){unsigned char temp;// Note: State is arranged column by column.// Cycle second row left one time.temp = state[ 1 + 0*4 ];state[ 1 + 0*4 ] = state[ 1 + 1*4 ];state[ 1 + 1*4 ] = state[ 1 + 2*4 ];state[ 1 + 2*4 ] = state[ 1 + 3*4 ];state[ 1 + 3*4 ] = temp;// Cycle third row left two times.temp = state[ 2 + 0*4 ];state[ 2 + 0*4 ] = state[ 2 + 2*4 ];state[ 2 + 2*4 ] = temp;temp = state[ 2 + 1*4 ];state[ 2 + 1*4 ] = state[ 2 + 3*4 ];state[ 2 + 3*4 ] = temp;// Cycle fourth row left three times, ie. right once.temp = state[ 3 + 3*4 ];state[ 3 + 3*4 ] = state[ 3 + 2*4 ];state[ 3 + 2*4 ] = state[ 3 + 1*4 ];state[ 3 + 1*4 ] = state[ 3 + 0*4 ];state[ 3 + 0*4 ] = temp;}void Cipher( unsigned char * block, unsigned char * expandedKey ) {unsigned char round = ROUNDS-1;XORBytes( block, expandedKey, 16 );expandedKey += BLOCKSIZE;do {SubBytes( block, 16 );ShiftRows( block );MixColumns( block );XORBytes( block, expandedKey, 16 );expandedKey += BLOCKSIZE;} while( --round );SubBytes( block, 16 );ShiftRows( block );XORBytes( block, expandedKey, 16 );}void aesEncInit(void){powTbl = block1;logTbl = tempbuf;CalcPowLog( powTbl, logTbl );sBox = block2;CalcSBox( sBox );expandedKey = block1;KeyExpansion( expandedKey );}void aesEncrypt( unsigned char * buffer, unsigned char * chainBlock ) {XORBytes( buffer, chainBlock, BLOCKSIZE );Cipher( buffer, expandedKey );CopyBytes( chainBlock, buffer, BLOCKSIZE );}#include <string.h>void AES_Test(void){unsigned char dat[16]="0123456789ABCDEF";unsigned char chainCipherBlock[16];unsigned char i;for(i=0;i<32;i++) AES_Key_Table[i]=i;//做运算之前先要设置好密钥,这里只是设置密钥的DEMO。
简单的加密解密代码
next
return ls_locked
end function
2.
字符串解密函数gf_sfree=====================
函数名:gf_sunlock
参数说明:
string类型 1、s_locked 待解密字符串
ls_temp=mid(s_locked,li_loop,2)
ls_free=ls_free+char(integer(ls_temp)+integer(li_last)*asc(s_lockseed))
end if
next
return ls_free
end function
case is < asc(lock_seed)
li_temp=asc(lock_seed) - asc(mid(source_string,li_count,1))
if li_temp>9 then
ls_locked=ls_locked+right(string(li_temp),1)+left(string(li_temp),1)+"0"
continue
end if
ls_temp=mid(s_locked,li_loop+1,1)+mid(s_locked,li_loop,1)
ls_free=ls_free+char(abs(integer(ls_temp) - asc(s_lockseed)))
else
功能:通过加密运算使字符串变为数字编码序列,从而实现加密;参数
中任何一个参数为空串将返回Null。
文件加密源代码
#include<stdio.h>#include<stdlib.h>#include<string.h>void add_file(char *in_fname,char *pwd,char *out_fname);void main(int argc,char *argv[]){char in_fname[30];//用户输入的要加密的文件名char out_fname[30];char del_fname[36]="del "; //删除文件名及命令int i;char pwd[20];//用来保存密码printf("功能:实现文件的加密和解密!\n注意:应用程序需跟文件放在同一个目录下!\n\n\n");if(argc!=4) //容错处理{printf("输入需要加密或者解密的文件(加后缀):\n");gets(in_fname); //得到要加密的文件名printf("输入密钥:\n");gets(pwd); //得到密码printf("输入解密或加密后的新文件名(加后缀):\n");gets(out_fname);//得到加密后你要的文件名add_file(in_fname,pwd,out_fname);}else //如果命令行参数正确,便直接运行程序{strcpy(in_fname,argv[1]);strcpy(pwd,argv[2]);strcpy(out_fname,argv[3]);add_file(in_fname,pwd,out_fname);}for(i=0;in_fname[i]!='\0';i++){del_fname[i+4]=in_fname[i];}del_fname[i+4]='/';del_fname[i+5]='p';del_fname[i+6]='\0';system(del_fname);}/*********加密子函数开始************/void add_file(char *in_fname,char *pwd,char *out_file){FILE *fp1,*fp2;register char ch;int j=0;int jj=0;fp1=fopen(in_fname,"rb");if(fp1==NULL){printf("文件打开失败!\n");system("echo Wscript.sleep 3000 >y.vbs ");system("call y.vbs &del y.vbs ");exit(1); //如果不能打开要加密的文件,便退出程序}fp2=fopen(out_file,"wb");if(fp2==NULL){printf("新建文件失败!\n");system("echo Wscript.sleep 3000 >y.vbs ");system("call y.vbs &del y.vbs ");exit(1); //如果不能建立加密后的文件,便退出}while(pwd[++jj]) ; //算出密钥长度,保存至j0ch=fgetc(fp1); //加密算法开始while(!feof(fp1)) //测试文件是否结束{fputc(ch^pwd[j>=jj?j=0:j++],fp2);//异或后写入fp2文件,加密和解密互逆ch=fgetc(fp1);}fclose(fp1);//关闭源文件fclose(fp2);//关闭目标文件}//void main()//{// system("del 1.c/p");//// while(1);////}。
DES加密算法代码
DES加密算法代码java实现DES加密1.准备算法所需要的密钥在Java中,DES加密算法需要一个8字节长的密钥,这里使用原始的8字节长的密钥来实现DES加密算法,同时,还有一种是“密钥扩展”,可以将8字节长的密钥扩展为16字节长,只需要多添加8个字节,后面8个字节可以跟前面8字节保持一致即可,即扩展后的密钥和原始密钥共享后八个字节即可。
byte [] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte) 0x88,0x10, 0x40, 0x38,0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, (byte)0xE2};下面介绍如何用Java来实现原始的8字节长的密钥:// 生成keyKeyGenerator keyGenerator = KeyGenerator.getInstance("DES");keyGenerator.init(new SecureRandom(keyBytes));SecretKey key = keyGenerator.generateKey(;2. 设置加密模式(Cipher Block Chaining Mode,简称CBC模式)在Java中,DES加密算法可以支持三种不同的加密模式:ECB,CBC,CFB。
其中ECB模式为最原始的模式,它不需要任何附加的参数,而CBC模式需要一个8字节的初始向量(Initial Vector,IV)参数,CFB模式需要一个1字节或8字节的变量参数,它们用来增加加密的强度。
这里,我们使用CBC模式,它是最常用的DES加密模式,下面是设置CBC模式所需要的参数:// 创建Cipher对象,指定其支持的DES算法Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 用密匙初始化Cipher对象IvParameterSpec param = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, key,param);3.加密。
AES加密C语言实现代码
AES加密C语言实现代码以下是一个简单的C语言实现AES加密算法的代码:```c#include <stdio.h>#include <stdlib.h>#include <stdint.h>//定义AES加密的轮数#define NR 10//定义AES加密的扩展密钥长度#define Nk 4//定义AES加密的行数和列数#define Nb 4//定义AES加密的状态矩阵typedef uint8_t state_t[4][4];//定义AES加密的S盒变换表static const uint8_t sbox[256] =//S盒变换表};//定义AES加密的轮常量表static const uint8_t Rcon[11] =//轮常量表};//定义AES加密的密钥扩展变换函数void KeyExpansion(const uint8_t* key, uint8_t* expandedKey) uint32_t* ek = (uint32_t*)expandedKey;uint32_t temp;//密钥拷贝到扩展密钥中for (int i = 0; i < Nk; i++)ek[i] = (key[4 * i] << 24) , (key[4 * i + 1] << 16) ,(key[4 * i + 2] << 8) , (key[4 * i + 3]);}//扩展密钥生成for (int i = Nk; i < Nb * (NR + 1); i++)temp = ek[i - 1];if (i % Nk == 0)//对上一个密钥的字节进行循环左移1位temp = (temp >> 8) , ((temp & 0xFF) << 24);//对每个字节进行S盒变换temp = (sbox[temp >> 24] << 24) , (sbox[(temp >> 16) & 0xFF] << 16) , (sbox[(temp >> 8) & 0xFF] << 8) , sbox[temp & 0xFF];// 取轮常量Rcontemp = temp ^ (Rcon[i / Nk - 1] << 24);} else if (Nk > 6 && i % Nk == 4)//对每个字节进行S盒变换temp = (sbox[temp >> 24] << 24) , (sbox[(temp >> 16) & 0xFF] << 16) , (sbox[(temp >> 8) & 0xFF] << 8) , sbox[temp & 0xFF];}//生成下一个密钥ek[i] = ek[i - Nk] ^ temp;}//定义AES加密的字节替换函数void SubBytes(state_t* state)for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)(*state)[i][j] = sbox[(*state)[i][j]];}}//定义AES加密的行移位函数void ShiftRows(state_t* state) uint8_t temp;//第2行循环左移1位temp = (*state)[1][0];(*state)[1][0] = (*state)[1][1]; (*state)[1][1] = (*state)[1][2]; (*state)[1][2] = (*state)[1][3]; (*state)[1][3] = temp;//第3行循环左移2位temp = (*state)[2][0];(*state)[2][0] = (*state)[2][2]; (*state)[2][2] = temp;temp = (*state)[2][1];(*state)[2][1] = (*state)[2][3]; (*state)[2][3] = temp;//第4行循环左移3位temp = (*state)[3][0];(*state)[3][0] = (*state)[3][3];(*state)[3][3] = (*state)[3][2];(*state)[3][2] = (*state)[3][1];(*state)[3][1] = temp;//定义AES加密的列混淆函数void MixColumns(state_t* state)uint8_t temp, tmp, tm;for (int i = 0; i < 4; i++)tmp = (*state)[i][0];tm = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ;temp = (*state)[i][0] ^ (*state)[i][1];(*state)[i][0] ^= temp ^ tm;temp = (*state)[i][1] ^ (*state)[i][2];(*state)[i][1] ^= temp ^ tm;temp = (*state)[i][2] ^ (*state)[i][3];(*state)[i][2] ^= temp ^ tm;temp = (*state)[i][3] ^ tmp;(*state)[i][3] ^= temp ^ tm;}//定义AES加密的轮密钥加函数void AddRoundKey(state_t* state, const uint8_t* roundKey) for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)(*state)[j][i] ^= roundKey[i * 4 + j];}}//定义AES加密函数void AES_Encrypt(const uint8_t* plainText, const uint8_t* key, uint8_t* cipherText)state_t* state = (state_t*)cipherText;uint8_t expandedKey[4 * Nb * (NR + 1)];//密钥扩展KeyExpansion(key, expandedKey);//初始化状态矩阵for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)(*state)[j][i] = plainText[i * 4 + j];}}//第1轮密钥加AddRoundKey(state, key);//迭代执行第2至第10轮加密for (int round = 1; round < NR; round++) SubBytes(state);ShiftRows(state);MixColumns(state);AddRoundKey(state, expandedKey + round * 16); }//执行第11轮加密SubBytes(state);ShiftRows(state);AddRoundKey(state, expandedKey + NR * 16);int maiuint8_t plainText[16] =//明文数据};uint8_t key[16] =//密钥数据};uint8_t cipherText[16];AES_Encrypt(plainText, key, cipherText);。
aes128加密算法c代码
aes128加密算法c代码以下是一个使用AES-128加密算法的C代码示例:c.#include <stdio.h>。
#include <stdlib.h>。
#include <string.h>。
#include <openssl/aes.h>。
// 加密函数。
void encryptAES(const unsigned char plaintext, int plaintext_len, const unsigned char key, unsigned char ciphertext) {。
AES_KEY aesKey;AES_set_encrypt_key(key, 128, &aesKey);AES_encrypt(plaintext, ciphertext, &aesKey);}。
// 解密函数。
void decryptAES(const unsigned char ciphertext, int ciphertext_len, const unsigned char key, unsigned char plaintext) {。
AES_KEY aesKey;AES_set_decrypt_key(key, 128, &aesKey);AES_decrypt(ciphertext, plaintext, &aesKey);}。
int main() {。
unsigned char key[16] = "0123456789ABCDEF"; // 128位密钥。
unsigned char plaintext[] = "Hello, World!"; // 明文。
int plaintext_len = strlen((char )plaintext);// 计算加密后的密文长度。
加密算法程序代码
加密算法程序代码下面是一个简单的加密算法程序代码示例,实现了基本的加密和解密功能,供参考:```pythondef encrypt(text, key):"""加密函数:param text: 原始文本:param key: 密钥:return: 加密后的文本"""encrypted_text = ""for char in text:#使用密钥进行简单的位移操作encrypted_char = chr((ord(char) + key) % 256)encrypted_text += encrypted_charreturn encrypted_textdef decrypt(encrypted_text, key):"""解密函数:param encrypted_text: 加密后的文本:param key: 密钥:return: 解密后的文本"""decrypted_text = ""for char in encrypted_text:#使用密钥进行简单的位移反操作decrypted_char = chr((ord(char) - key) % 256) decrypted_text += decrypted_charreturn decrypted_text#测试加密解密函数text = "Hello, World!"key = 5encrypted_text = encrypt(text, key)decrypted_text = decrypt(encrypted_text, key) print("加密后的文本:", encrypted_text)print("解密后的文本:", decrypted_text)```输出结果:```解密后的文本: Hello, World!```这个示例中的加密算法采用了简单的位移操作,即将每个字符的ASCII码值加上密钥,然后取余256、解密操作则是将加密后的字符的ASCII码值减去密钥,再取余256、这个算法非常简单且不安全,仅仅是为了演示目的。
des加密算法python代码
序号1:什么是DES加密算法?DES(Data Encryption Standard)是一种对称密钥加密算法,由IBM研制并于1977年被美国国家标准局(NBS)确定为联邦数据处理标准(FIPS)的一部分。
DES算法使用56位的密钥对64位的数据进行加密,经过多轮的置换、替换和移位运算后,得到密文。
DES算法已经被AES算法所代替,但在一些旧系统中仍然在使用。
序号2:DES加密算法的Python实现下面是一个简单的使用Python实现DES加密算法的例子:```pythonfrom Crypto.Cipher import DESfrom Crypto.Random import get_random_bytesdef des_encrypt(key, data):cipher = DES.new(key, DES.MODE_ECB)padded_data = data + b'\0' * (8 - len(data) % 8)encrypted_data = cipher.encrypt(padded_data)return encrypted_datadef des_decrypt(key, encrypted_data):cipher = DES.new(key, DES.MODE_ECB)decrypted_data = cipher.decrypt(encrypted_data).rstrip(b'\0') return decrypted_datakey = get_random_bytes(8)data = b'This is a test'encrypted_data = des_encrypt(key, data)decrypted_data = des_decrypt(key, encrypted_data)print('Original data:', data)print('Encrypted data:', encrypted_data)print('Decrypted data:', decrypted_data)```序号3:代码解读3.1 导入必要的模块```pythonfrom Crypto.Cipher import DESfrom Crypto.Random import get_random_bytes```在这行代码中,我们使用了`Crypto.Cipher`模块中的DES类和`Crypto.Random`模块的`get_random_bytes`函数。
MD5加密(纯代码)
//定义用于加密的字符 十六进制 char [] md5Str={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; try{
byte bytes = digest[i]; str[k++]=md5Str[bytes >>> 4 & 0xf]; str[k++]=md5Str[bytes & 0xf]; } //返回加密后的字符串 return new String(str); }catch (Exception e){ LOGGER.warn(e.getMessage(),e); return null; }
//处理摘要后的信息HASH散列 byte[] digest = mdins.digest();
//将密文转换为十六进制字符串格式 int j = digest.length; System.out.println("信息摘要后的十六进制字符串长度为:"+digest.length+"信息摘要后的十六进制字符串toString后:"+digest.toString()); char [] str = new char[j*2]; int k=0; for (int i=0;i<j;i++){
网络安全的代码
网络安全的代码网络安全是指保护计算机网络和其所连接的设备免受未经授权访问、使用、破坏、修改、泄露等威胁和危险的综合技术措施。
在网络安全领域中,编写代码是非常重要的一环。
以下是一些网络安全代码的示例,其中不含标题。
示例1:实现密码加密和解密的代码```pythonimport hashlibdef encrypt_password(password):# 将密码加密为MD5哈希值hashed_password = hashlib.md5(password.encode()).hexdigest() return hashed_passworddef check_password(password, hashed_password):# 验证密码是否与哈希值匹配return encrypt_password(password) == hashed_password```示例2:防止SQL注入的代码```pythonimport psycopg2def execute_query(query, params):# 使用参数化查询来防止SQL注入conn = psycopg2.connect(database="mydb", user="myuser",password="mypassword", host="localhost", port="5432")cur = conn.cursor()cur.execute(query, params)result = cur.fetchall()mit()cur.close()conn.close()return result```示例3:实现防止跨站脚本攻击(XSS)的代码```pythonfrom flask import Flask, render_template_string, requestfrom markupsafe import escapeapp = Flask(__name__)@app.route('/')def index():# 从用户输入中对特殊字符进行转义username = escape(request.args.get('username', ''))return render_template_string('<h1>Welcome,{{ username }}</h1>', username=username)if __name__ == '__main__':app.run()```这些代码示例展示了如何在编写网络安全相关代码时保护系统免受潜在的威胁。
网络安全技术代码分享
网络安全技术代码分享网络安全技术主要是为了保护网络中的数据和系统免受黑客、病毒和其他恶意攻击的影响。
下面是一些常见的网络安全技术代码分享:1. 防火墙设置代码:```pythonimport iptcdef set_firewall_rules():table = iptc.Table(iptc.Table.FILTER)chain = iptc.Chain(table, "INPUT")rule = iptc.Rule()rule.in_interface = "eth0"rule.src = "192.168.0.0/24"rule.protocol = "tcp"rule.target = iptc.Target(rule, "ACCEPT")rule.tcp_flags = "SYN,ACK"match = iptc.Match(rule, "tcp")match.dport = "22"rule.add_match(match)chain.insert_rule(rule)```2. 数据加密代码:```pythonimport hashlibimport base64def encrypt_data(data, password):key = hashlib.sha256(password.encode()).digest() iv = b'0000000000000000'cipher = AES.new(key, AES.MODE_CBC, iv)padded_data = data + (AES.block_size - len(data) % AES.block_size) * ' 'encrypted_data = cipher.encrypt(padded_data)return base64.b64encode(encrypted_data)```3. 多因素身份验证代码:```pythonimport pyotpdef generate_otp(secret_key):totp = pyotp.TOTP(secret_key)return totp.now()def validate_otp(otp, secret_key):totp = pyotp.TOTP(secret_key)return totp.verify(otp)```4. CSRF防护代码:```pythonfrom flask import Flask, session, request, render_template_string app = Flask(__name__)app.secret_key = 'secret_key'@app.route('/')def index():token = session.get('token')return render_template_string('<input type="hidden"name="csrf_token" value="{{ token }}">')@app.route('/login', methods=['POST'])def login():csrf_token = request.form.get('csrf_token')if csrf_token == session.get('token'):return 'Login success'else:return 'CSRF attack detected!'if __name__ == '__main__':app.run()```5. DDos攻击防护代码:```pythonimport sysimport threadingimport socketHOST = 'localhost'PORT = 8080MAX_BYTES = 65535def send_request():sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT))message = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"sock.sendall(message.encode())sock.close()def start_attack(threads):for i in range(threads):threading.Thread(target=send_request).start()if __name__ == '__main__':threads = int(sys.argv[1])start_attack(threads)```以上是一些常见的网络安全技术代码分享,可以用于保护网络安全。
C语言实现数据加密算法
C语言实现数据加密算法数据加密是对敏感信息进行转换的过程,以保护数据的机密性和完整性。
C语言提供了强大的工具和库来实现各种加密算法,包括对称加密和非对称加密等。
对称加密算法是一种使用相同密钥加密和解密数据的方法。
其中最常见的算法是DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。
下面是一个实现AES算法的示例代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/aes.h>void encrypt_data(const unsigned char *data, size_t len, const unsigned char *key, unsigned char *encrypted_data) AES_KEY aes_key;AES_set_encrypt_key(key, 128, &aes_key);AES_encrypt(data, encrypted_data, &aes_key);void decrypt_data(const unsigned char *encrypted_data,size_t len, const unsigned char *key, unsigned char *data) AES_KEY aes_key;AES_set_decrypt_key(key, 128, &aes_key);AES_decrypt(encrypted_data, data, &aes_key);int maiunsigned char data[AES_BLOCK_SIZE] = "hello world!";size_t len = sizeof(data);unsigned char encrypted_data[AES_BLOCK_SIZE];encrypt_data(data, len, key, encrypted_data);unsigned char decrypted_data[AES_BLOCK_SIZE];decrypt_data(encrypted_data, len, key, decrypted_data);printf("Original Data: %s\n", data);printf("Encrypted Data: ");for (int i = 0; i < len; i++)printf("%02x ", encrypted_data[i]);}printf("\nDecrypted Data: %s\n", decrypted_data);return 0;```以上代码使用了OpenSSL库中的AES加密算法。
AES加密算法源代码
//AES.h#define decrypt TRUE#define encrypt FALSE#define TYPE BOOLtypedef struct _AES{int Nb;int Nr;int Nk;unsigned long *Word;unsigned long *State;}AES;/*加密数据,这个函数和下面的InvCipher用于演示用的,只作了一次加密或解密。
要进行大数据量加解密只需对这两个函数稍作修改就可以了。
byte *input 明文byte *inSize 明文长byte *out 密文存放的地方byte *key 密钥keybyte *keySize 密钥长*/void Cipher(unsigned char* input,int inSize,unsigned char* out,unsigned char* key,int keySize);/*解密数据byte *input 密文int *inSize 密文长byte *out 明文存放的地方byte *key 密钥keyint *keySize 密钥长*/void InvCipher(unsigned char* input,int inSize,unsigned char* out, unsigned char* key,int keySize);/*生成加密用的参数AES结构int inSize 块大小byte* 密钥int 密钥长unsigned long 属性(标实类型) 返回AES结构指针*/AES *InitAES(AES *aes,int inSize,unsigned char* key,int keySize, TYPE type);/*生成加密用的参数AES结构int inSize 块大小byte* 密钥int 密钥长返回AES结构指针*/AES *InitAES(int inSize,unsigned char* key,int keySize, BOOL );/*加密时进行Nr轮运算AES * aes 运行时参数*/void CipherLoop(AES *aes);/*解密时进行Nr轮逆运算AES * aes 运行时参数*/void InvCipherLoop(AES *aes);/*释放AES结构和State和密钥库word*/void freeAES(AES *aes);//AES.cpp#include "stdafx.h"#include <windows.h>#include <stdio.h>#include "AES.h"unsigned char* SubWord(unsigned char* word);unsigned long* keyExpansion(unsigned char* key, int Nk, int Nr,int); /*加密数据byte *input 明文byte *inSize 明文长byte *out 密文存放的地方byte *key 密钥keybyte *keySize 密钥长*/void Cipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize){AES aes ;InitAES(&aes,inSize,key,keySize,encrypt);//while(...){memcpy(aes.State,input,inSize);CipherLoop(&aes);memcpy(out,aes.State,inSize);//}}/*解密数据byte *input 密文int *inSize 密文长byte *out 明文存放的地方byte *key 密钥keyint *keySize 密钥长*/void InvCipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize){AES aes;InitAES(&aes,inSize,key,keySize,decrypt);memcpy(aes.State,input,inSize);InvCipherLoop(&aes);memcpy(aes.State,out,inSize);}/*生成加密用的参数AES结构int inSize 块大小byte* 密钥int 密钥长返回AES结构指针*/AES *InitAES(AES *aes,int inSize, unsigned char *key, int keySize, TYPEtype){int Nb = inSize >>2,Nk = keySize >>2,Nr = Nb < Nk ? Nk:Nb+6;aes->Nb = Nb;aes->Nk = Nk;aes->Nr = Nr;aes->Word = keyExpansion(key,Nb,Nr,Nk);aes->State = new unsigned long[Nb+3];if(type)aes->State += 3;return aes;}/*生成加密用的参数AES结构int inSize 块大小byte* 密钥int 密钥长返回AES结构指针*/AES *InitAES(int inSize, unsigned char* key, int keySize,unsigned long type){return InitAES(new AES(),inSize,key,keySize,type);}/**/void CipherLoop(AES *aes){unsigned char temp[4];unsigned long *word8 = aes->Word,*State = aes->State;int Nb = aes->Nb,Nr = aes->Nr;int r;for (r = 0; r < Nb; ++r){State[r] ^= word8[r];}for (int round =1; round <Nr; ++round) {word8 += Nb;/*假设Nb=4;---------------------| s0 | s1 | s2 | s3 |---------------------| s4 | s5 | s6 | s7 |---------------------| s8 | s9 | sa | sb |---------------------| sc | sd | se | sf |---------------------| | | | |---------------------| | | | |---------------------| | | | |---------------------*/memcpy(State+Nb,State,12);/*Nb=4;---------------------| s0 | | | |---------------------| s4 | s5 | | |---------------------| s8 | s9 | sa | |---------------------| sc | sd | se | sf |---------------------| | s1 | s2 | s3 |---------------------| | | s6 | s7 |---------------------| | | | sb |---------------------*/for(r =0; r<Nb; r++){/*temp = {Sbox[s0],Sbox[s5],Sbox[sa],Sbox[sf]};*/temp[0] = Sbox[*((unsigned char*)State)];temp[1] = Sbox[*((unsigned char*)(State+1)+1)];temp[2] = Sbox[*((unsigned char*)(State+2)+2)];temp[3] = Sbox[*((unsigned char*)(State+3)+3)];*((unsigned char*)State) = Log_02[temp[0]] ^ Log_03[temp[1]] ^ temp[2] ^ temp[3];*((unsigned char*)State+1) = Log_02[temp[1]] ^ Log_03[temp[2]] ^ temp[3] ^ temp[0];*((unsigned char*)State+2) = Log_02[temp[2]] ^ Log_03[temp[3]] ^ temp[0] ^ temp[1];*((unsigned char*)State+3) = Log_02[temp[3]] ^ Log_03[temp[0]] ^ temp[1] ^ temp[2];*State ^= word8[r];State++;State -= Nb;}memcpy(State+Nb,State,12);word8 += Nb;for(r =0; r<Nb; r++){*((unsigned char*)State) = Sbox[*(unsigned char*)State];*((unsigned char*)State+1) = Sbox[*((unsigned char*)(State+1)+1)]; *((unsigned char*)State+2) = Sbox[*((unsigned char*)(State+2)+2)]; *((unsigned char*)State+3) = Sbox[*((unsigned char*)(State+3)+3)];*State ^= word8[r];State++;}}/*解密时进行Nr轮逆运算AES * aes 运行时参数*/void InvCipherLoop(AES *aes){unsigned long *Word = aes->Word,*State = aes->State;int Nb = aes->Nb,Nr = aes->Nr;unsigned char temp[4];int r =0;Word += Nb*Nr;for (r = 0; r < Nb; ++r)State[r] ^= Word[r];}State -= 3;for (int round = Nr-1; round > 0; --round) {/*假设Nb=4;---------------------| | | | |---------------------| | | | |---------------------| | | | |---------------------| s0 | s1 | s2 | s3 |---------------------| s4 | s5 | s6 | s7 |---------------------| s8 | s9 | sa | sb |---------------------| sc | sd | se | sf |---------------------*/memcpy(State,State+Nb,12);/*Nb=4;---------------------| | | | s7 |---------------------| | | sa | sb |---------------------| | sd | se | sf |---------------------| s0 | s1 | s2 | s3 |---------------------| s4 | s5 | s6 | |---------------------| s8 | s9 | | |---------------------| sc | | | |---------------------*/Word -= Nb;State += Nb+2;for(r = Nb-1; r >= 0; r--){/*temp = {iSbox[s0],iSbox[sd],iSbox[sa],iSbox[s7]};*/temp[0] = iSbox[*(byte*)State];temp[1] = iSbox[*((byte*)(State-1)+1)];temp[2] = iSbox[*((byte*)(State-2)+2)];temp[3] = iSbox[*((byte*)(State-3)+3)];*(unsigned long*)temp ^= Word[r];*(unsigned char*)State = Log_0e[temp[0]] ^ Log_0b[temp[1]] ^Log_0d[temp[2]] ^ Log_09[temp[3]];*((unsigned char*)State+1) = Log_0e[temp[1]] ^ Log_0b[temp[2]] ^ Log_0d[temp[3]] ^ Log_09[temp[0]];*((unsigned char*)State+2) = Log_0e[temp[2]] ^ Log_0b[temp[3]] ^ Log_0d[temp[0]] ^ Log_09[temp[1]];*((unsigned char*)State+3) = Log_0e[temp[3]] ^ Log_0b[temp[0]] ^ Log_0d[temp[1]] ^ Log_09[temp[2]];State --;}State -= 2;}Word -= Nb;memcpy(State,State+Nb,12);State += Nb+2;for(r = Nb-1; r >= 0; r--){*(unsigned char*)State = iSbox[*(unsigned char*)State];*((unsigned char*)State+1) = iSbox[*((unsigned char*)(State-1)+1)]; *((unsigned char*)State+2) = iSbox[*((unsigned char*)(State-2)+2)]; *((unsigned char*)State+3) = iSbox[*((unsigned char*)(State-3)+3)];*State ^= Word[r];State --;}}/**--------------------------------------------*|k0|k1|k2|k3|k4|k5|k6|k7|k8|k9|.......|Nk*4|*--------------------------------------------*Nr轮密钥库*每个密钥列长度为Nb*---------------------*| k0 | k1 | k2 | k3 |*---------------------*| k4 | k5 | k6 | k7 |*---------------------*| k8 | k9 | ka | kb |*---------------------*| kc | kd | ke | kf |*---------------------*/unsigned long* keyExpansion(byte* key, int Nb, int Nr, int Nk){unsigned long *w =new unsigned long[Nb * (Nr+1)]; // 4 columns of bytes corresponds to a wordmemcpy(w,key,Nk<<2);unsigned long temp;for (int c = Nk; c < Nb * (Nr+1); ++c){//把上一轮的最后一行放入temptemp = w[c-1];//判断是不是每一轮密钥的第一行if (c % Nk == 0){//左旋8位temp = (temp<<8)|(temp>>24);//查Sbox表SubWord((byte*)&temp);temp ^= Rcon[c/Nk];}else if ( Nk > 6 && (c % Nk == 4) ){SubWord((byte*)&temp);}//w[c-Nk] 为上一轮密钥的第一行w[c] = w[c-Nk] ^ temp;}return w;}unsigned char* SubWord(unsigned char* word){word[0] = Sbox[ word[0] ];word[1] = Sbox[ word[1] ];word[2] = Sbox[ word[2] ];word[3] = Sbox[ word[3] ];return word;}/*释放AES结构和State和密钥库word */void freeAES(AES *aes){// for(int i=0;i<aes->Nb;i++)// {// printf("%d/n",i);// free(aes->State[i]);// free(aes->Word[i]);// }// printf("sdffd");}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Private Sub Command1_Click()
End
End Sub
‘加密代码
Private Sub Command2_Click()
filename1$ = InputBox("请输入需要加密文件名及路径:") '输入需要加密的文件名及路径,打开该文件,并把其内容存放再a$变量中
Open filename1$ For Input As #1
While Not EOF(1)
Line Input #1, a$
MsgBox a$, , "加密前的文本内容" '在对话框中显示加密前的文本内容
Wend
Close #1
mm$ = "" '使用字符串函数对原文本中的字符逐个截取,并统一把其机内码值减10,变换为其他的字符,保存在
n = Len(a$)
For i = 1 To n 'C$变量中,并通过mm$变量把每个字符重新组合,成为加密后的文本并再对话框中显示
b$ = Mid$(a$, i, 1)
C$ = Chr(Asc(b$) - 3)
mm$ = mm$ & C$
Next
MsgBox mm$, , "加密后的文本内容"
filename2$ = InputBox("请输入加密后的文件名及路径:") '把加密后的文本保存在相应的文件中
Open filename2$ For Output As #2
Print #2, mm$ '在对话框中显示加密后的文本内容
Close #2
End Sub '程序结束
解密代码
Private Sub Command3_Click()
filename1$ = InputBox("请输入需要解密文件名及路径:") '输入需要解密的文件名及路径,打开该文件,并把其内容存放再a$变量中
Open filename1$ For Input As #1
While Not EOF(1)
Line Input #1, a$
MsgBox a$, , "解密前的文本内容" '在对话框中显示解密前的文本内容
Wend
Close #1
mm$ = "" '使用字符串函数对原文本中的字符逐个截取,并统一把其机内码值减10,变换为其他的字符,保存在
n = Len(a$)
For i = 1 To n 'C$变量中,并通过mm$变量把每个字符重新组合,成为加密后的文本并再对话框中显示
b$ = Mid$(a$, i, 1)
C$ = Chr(Asc(b$) + 3)
mm$ = mm$ & C$
Next
MsgBox mm$, , "解密后的文本内容"
filename2$ = InputBox("请输入加密后的文件名及路径:") '把解密后的文本保存在相应的文件中
Open filename2$ For Output As #2
Print #2, mm$ '在对话框中显示解密后的文本内容
Close #2
End Sub '程序结束
Private Sub Form_Load()
End Sub
>>>>>>>>>>>>修改源码:
答案
Line Input # 语句一次只从文件中读出一个字符,直到遇到回车符 (Chr(13)) 或回车-换行符 (Chr(13) + Chr(10)) 为止。
回车-换行符将被跳过,而不会被附加到字符串上。
你的程序:
Open filename1$ For Input As #1
Line Input #1, a$
MsgBox a$, , "加密前的文本内容" '在对话框中显示加密前的文本内容
Close #1
这里只读入了filename1$文件的第一行。
要处理文件的全部内容,可以这样写:
dim fbuff as string
Open filename1$ For Input As #1
while not eof(#1)
Line Input #1, fbuff
a$=a$& fbuff &VBCrLf
loop
Close #1
回答人的补充 2010-02-07 11:32
do while not eof(1) line input #1,fbuff a$ = a$ & fbuff & vbcrlf loop。