精华内容
下载资源
问答
  • AES128加密

    千次阅读 2018-07-01 22:27:39
    /** * 加密 * 模式:AES/CBC/PKCS7Padding * @author dai * @param encodeRules 秘钥 * @param content 加密串 * @return */ public static String AESEncode(String encodeRules, String content, Str...
    /**
         * 加密
         * 模式:AES/CBC/PKCS7Padding
         * @author dai
         * @param encodeRules 秘钥
         * @param content 加密串
         * @return
         */
        public  static  String AESEncode(String encodeRules, String content, String ivParameter)  throws  Exception {
            int  base =  16
            byte [] keybyte = encodeRules.getBytes( "UTF-8" );
            if  (keybyte.length % base !=  0 ) { 
                int  groups = keybyte.length / base + (keybyte.length % base !=  0  1  0 ); 
                byte [] temp =  new  byte [groups * base]; 
                Arrays.fill(temp, ( byte 0 ); 
                System.arraycopy(keybyte,  0 , temp,  0 , keybyte.length); 
                keybyte = temp; 
           
            // 初始化 
            Security.addProvider( new  BouncyCastleProvider()); 
            // 转化成JAVA的密钥格式 
            Key key =  new  SecretKeySpec(keybyte,  "AES" ); 
            try 
                // 初始化cipher 
                Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS7Padding" , "BC" ); 
                cipher.init(Cipher.ENCRYPT_MODE, key,  new  IvParameterSpec(ivParameter.getBytes())); 
                byte [] encryptedText = cipher.doFinal(content.getBytes());
                return  new  String( new  Base64().encode(encryptedText)).replaceAll( "\r\n" "" );   
            catch  (Exception e) { 
                logger.info( "AESEncode error" ,e);
            }
            return  null ;   
        }
    展开全文
  • Java AES128加密解密

    2019-01-19 20:53:59
    Java AES128加密解密 示例源码(AES-ECB-PKCS7Padding)
  • AES128加密 蓝牙BLE

    2017-06-28 17:55:53
    AES128加密 用于BLE4.0 蓝牙传输数据 加密, 网上没有现成的代码,自己封装了一个方法
  • AES128加密解密、C#、 asp.net、winform、kokketiny、AES128、C,网站找了很久终于有一个和物联网开发C语言加密解密相同的方法。.ECB
  • AES128 加密 解密 C#

    热门讨论 2013-01-04 15:36:24
    AES128 加密 解密 C#实现 可以实现文件等的加密解密。
  • AES128加密解密以及参数的处理

    千次阅读 2017-07-26 09:40:22
    AES128加密
    
    
    	/**
    	 * AES加密实现方法
    	 */
    	public static byte[] AESEncrypt(byte[] plainBytes, byte[] keyBytes, String keyAlgorithm, String cipherAlgorithm, String IV)
    			throws Exception {
    		try {
    			// AES密钥长度为128bit、192bit、256bit,默认为128bit
    			if (keyBytes.length % 8 != 0 || keyBytes.length < 16 || keyBytes.length > 32) {
    				throw new Exception("AES密钥长度不合法");
    			}
    			Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    			SecretKey secretKey = new SecretKeySpec(keyBytes, keyAlgorithm);
    			if (StringUtils.trimToNull(IV) != null) {
    				IvParameterSpec ivspec = new IvParameterSpec(IV.getBytes());
    				cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
    			} else {
    				cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    			}
    			byte[] encryptedBytes = cipher.doFinal(plainBytes);
    
    			return encryptedBytes;
    		} catch (NoSuchAlgorithmException e) {
    			throw new Exception(String.format("没有[%s]此类加密算法", cipherAlgorithm));
    		} catch (NoSuchPaddingException e) {
    			throw new Exception(String.format("没有[%s]此类填充模式", cipherAlgorithm));
    		} catch (InvalidKeyException e) {
    			System.out.println(e);
    			throw new Exception("无效密钥");
    		} catch (InvalidAlgorithmParameterException e) {
    			throw new Exception("无效密钥参数");
    		} catch (BadPaddingException e) {
    			throw new Exception("错误填充模式");
    		} catch (IllegalBlockSizeException e) {
    			throw new Exception("加密块大小不合法");
    		}
    	}
    
    	/**
    	 * AES解密实现方法
    	 */
    	public static byte[] AESDecrypt(byte[] encryptedBytes, byte[] keyBytes, String keyAlgorithm, String cipherAlgorithm, String IV)
    			throws Exception {
    		try {
    			// AES密钥长度为128bit、192bit、256bit,默认为128bit
    			if (keyBytes.length % 8 != 0 || keyBytes.length < 16 || keyBytes.length > 32) {
    				throw new Exception("AES密钥长度不合法");
    			}
    
    			Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    			SecretKey secretKey = new SecretKeySpec(keyBytes, keyAlgorithm);
    			if (IV != null && StringUtils.trimToNull(IV) != null) {
    				IvParameterSpec ivspec = new IvParameterSpec(IV.getBytes());
    				cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
    			} else {
    				cipher.init(Cipher.DECRYPT_MODE, secretKey);
    			}
    
    			byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
    
    			return decryptedBytes;
    		} catch (NoSuchAlgorithmException e) {
    			throw new Exception(String.format("没有[%s]此类加密算法", cipherAlgorithm));
    		} catch (NoSuchPaddingException e) {
    			throw new Exception(String.format("没有[%s]此类填充模式", cipherAlgorithm));
    		} catch (InvalidKeyException e) {
    			throw new Exception("无效密钥");
    		} catch (InvalidAlgorithmParameterException e) {
    			throw new Exception("无效密钥参数");
    		} catch (BadPaddingException e) {
    			throw new Exception("错误填充模式");
    		} catch (IllegalBlockSizeException e) {
    			throw new Exception("解密块大小不合法");
    		}
    	}
    	/**
    	 * AES加密
    	 * @author zc-t208
    	 * @param param 需要加密的字符串
    	 * @return
    	 */
    	public static String AESEncodeParam(String param){
    		if(StringUtils.isEmpty(param)){
    			return null;
    		}
    		String encryptData = "";
    		String strKey = sysConfigService.getAESStrKey().getConfigValue();
    		try {
    			byte[] base64encryptDataBytes = Base64.encodeBase64(AESEncrypt(param.getBytes("UTF-8"),strKey.getBytes("UTF-8"),"AES","AES/ECB/PKCS5Padding",null));
    			encryptData = new String(base64encryptDataBytes, "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			log.info(e.getMessage());
    			e.printStackTrace();
    		} catch (Exception e) {
    			log.info(e.getMessage());
    			e.printStackTrace();
    		}
    		return encryptData;
    		
    	}
    	/**
    	 * AES解密
    	 * @author zc-t208
    	 * @param param 需要解密的参数
    	 * @return
    	 */
    	public static String AESdecodeParam(String param){
    		if(StringUtils.isEmpty(param)){
    			return null;
    		}
    		String resData = "";
    		String strKey = sysConfigService.getAESStrKey().getConfigValue();
    		try {
    			byte[] decodeBase64DataBytes = Base64.decodeBase64(param.getBytes("UTF-8"));
    			byte[] merchantXmlDataBytes = AESDecrypt(decodeBase64DataBytes,strKey.getBytes("UTF-8"), "AES", "AES/ECB/PKCS5Padding", null);
    			resData = new String(merchantXmlDataBytes,"UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			log.info(e.getMessage());
    			e.printStackTrace();
    		} catch (Exception e) {
    			log.info(e.getMessage());
    			e.printStackTrace();
    		}
    		return resData;
    		
    	}
    
    
    
    
    
    
    	/**
    	 * 获取AES秘钥方法
    	 * @param length
    	 * @return
    	 */
    	public static String generateLenString(int length) {
    		char[] cResult = new char[length];
    		int[] flag = { 0, 0, 0 }; // A-Z, a-z, 0-9
    		int i = 0;
    		while (flag[0] == 0 || flag[1] == 0 || flag[2] == 0 || i < length) {
    			i = i % length;
    			int f = (int) (Math.random() * 3 % 3);
    			if (f == 0)
    				cResult[i] = (char) ('A' + Math.random() * 26);
    			else if (f == 1)
    				cResult[i] = (char) ('a' + Math.random() * 26);
    			else
    				cResult[i] = (char) ('0' + Math.random() * 10);
    			flag[f] = 1;
    			i++;
    		}
    		return new String(cResult);
    	}
    
    注意:加密秘钥为16位随机数字,并且加密和解密使用同一秘钥,加密后的参数想要传递,需要再进行一次加密后再传输
    keyAlgorithm为"AES"
    cipherAlgorithm为"AES/ECB/PKCS5Padding"
    
    
    本博客为自己记录所做,如果有什么不对的地方,请多多指教
    
    
    
    
    
    
    
    
    展开全文
  • IOS JAVA AES128加密解密

    2016-04-07 11:54:59
    IOS JAVA AES128加密解密,使用于IOS,ANDROID,JAVA
  • AES 128 加密,亲测可用,使用源码,可不定长加密,未使用ssl库,使用VS2015软件,可以作为作业参考或研究参考
  • AES128加密解密算法,及应用例程,支持CBC,ECB加密方式。 int main(void) { test_encrypt_cbc(); test_decrypt_cbc(); test_decrypt_ecb(); test_encrypt_ecb(); mytest_test_cbc(); getchar(); return 0; }
  • aes128加密可以任意密钥长度和明文长度 c代码 linux 恩
  • AES128加密解密方法

    千次阅读 2015-06-30 15:56:35
    AES128加密解密方法AES介绍AES(高级加密标准Advanced Encryption Standard) 2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密匙加密标准。新的标准将会代替密匙长度变的太短的...

    AES128加密解密方法

    AES介绍

    AES(高级加密标准Advanced Encryption Standard)
    2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密匙加密标准。新的标准将会代替密匙长度变的太短的旧的DES算法。Rijndael被选中成为将来的AES。Rijndael这个名字是从它的两个发明者Rijmen和Daemen的名字得来的。

    这个加密体系据说是一种分组加密方法,因为信息的内容是以128位长度的分组为加密单元的。加密密匙长度有128,192或256位多种选择。正象你所知的那样,DES加密的分组长度是64比特,而密匙长度只有64比特。三重DES加密的分组长度通常是64比特,而密匙长度上112比特。

    图一描述了AES的操作模式。首先密匙K0和待加密信息按位相与。然后所有要加密的分组都用一个函数F进行迭代计算,计算用的子密匙是由一个密匙扩展函数产生的,初始的密匙是主密匙。

    对于AES 函数F要迭代10次。
    图2描述的是加密过程中函数F是如何被迭代的。一个128位的分组转换成16个字节,作为下面处理的输入。首先,每一个字节分别经过替换函数S的处理,然后,用第二个置换函数P对16个字节进行处理。然后这个结果就和匙扩展函数产生的子匙进行位与。
    匙Ki是用匙扩展函数从第K(i-1)轮的子匙和第K0的密匙得到的。图三描述了匙扩展函数。16个字节的被分成4组,每组4个字节,来进行处理。最后的一组的4个字节由替换函数S(这个S和用F函数进行迭代处理时的S是一样的)来进行替换处理。最初的4个字节的结果和α系数相加,这个系数是与轮数相关的,它是预先定义的。最后,为了得到Ki,把得到的4个字节的结果和K(i-1)匙的最初4个字节按位相加,然后得到的结果又和K(i-1)匙的下面的4个字节按位相加,如此类推。

    好了,现在我们简单地看看替换函数是怎么得到的,然后看看ai 常数有什么作用。为了简单的理由,一个字节应该是256个元素集(称为有限域)的一个元素,对于这些元素只包含一些简单的操作(例如加法,乘法,反转)。事实上,前面提到的替换函数S在那个有限域里的反转。置换函数S被定义为一个很简单的操作,以便能简单的实现。ai 系数是和指数I(有限域的元素)成正比的。这些考虑,使得AES实现起来非常有效。

    因为AES仅仅在基于简单的位操作运算,这有两个主要的优点:

    即使是纯粹的软件实现,AES也是很快的。例如,用C++在奔腾200的电脑上实现的AES的加密速度可达到70M位/秒;
    AES并不依赖于S-Box的选择(根据NSA, DES里的S-Boxes可能包含后门),对分析算法抗击差分密码分析及线性密码分析具有能力。

    IOS平台下的AES128加密解密

    • 首先导入GTMBase64.h这个头文件,这个头文件在github上有托管,链接为https://github.com/stephenzl/GTBase64
    • 把这个文件加入你的项目,然后再导CommonCrypto/CommonCrypto.h这个系统的头文件
    • 紧接着要定义一个宏,这个宏就是密码,解密加密的密码,密码可自行定义
      define gkey @”xxxxxxxxxxxxxxx”

    加密类方法

        +(NSString *)AES128Encrypt:(NSString *)plainText
        {
         char keyPtr[kCCKeySizeAES128+1];
        memset(keyPtr, 0, sizeof(keyPtr));
        [gkey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
        char ivPtr[kCCBlockSizeAES128+1];
        memset(ivPtr, 0, sizeof(ivPtr));
        [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
    
        NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
        NSUInteger dataLength = [data length];
    
        int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
        int newSize = 0;
    
        if(diff > 0)
        {
            newSize = dataLength + diff;
        }
    
        char dataPtr[newSize];
        memcpy(dataPtr, [data bytes], [data length]);
        for(int i = 0; i < diff; i++)
        {
            dataPtr[i + dataLength] = 0x00;
        }
    
        size_t bufferSize = newSize + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        memset(buffer, 0, bufferSize);
    
        size_t numBytesCrypted = 0;
    
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                              kCCAlgorithmAES128,
                                              0x0000,               //No padding
                                              keyPtr,
                                              kCCKeySizeAES128,
                                              ivPtr,
                                              dataPtr,
                                              sizeof(dataPtr),
                                              buffer,
                                              bufferSize,
                                              &numBytesCrypted);
    
        if (cryptStatus == kCCSuccess) {
            NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
            return [GTMBase64 stringByEncodingData:resultData];
        }
        free(buffer);
        return nil;
    }

    解密类方法

        +(NSString *)AES128Decrypt:(NSString *)encryptText
        {
        char keyPtr[kCCKeySizeAES128 + 1];
        memset(keyPtr, 0, sizeof(keyPtr));
        [gkey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
        char ivPtr[kCCBlockSizeAES128 + 1];
        memset(ivPtr, 0, sizeof(ivPtr));
        [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
    
        NSData *data = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];
        NSUInteger dataLength = [data length];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
    
        size_t numBytesCrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                              kCCAlgorithmAES128,
                                              0x0000,
                                              keyPtr,
                                              kCCBlockSizeAES128,
                                              ivPtr,
                                              [data bytes],
                                              dataLength,
                                              buffer,
                                              bufferSize,
                                              &numBytesCrypted);
        if (cryptStatus == kCCSuccess) {
            NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
            return [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
    
        }
    
    
        free(buffer);
        return nil;
    
        }
    展开全文
  • AES128加密算法完整实现

    万次阅读 多人点赞 2019-02-26 22:38:02
    原本想把自己AES加密算法的整个实现过程给详细复述下来,分享给想学习的同学,也方便自己复习,但后来发现该工作量太大,加上作业太多没有过多的时间去写。所以就想把自己在学习的过程中多遇到的好的文章进行汇总,...

          概述

    原本想把自己AES加密算法的整个实现过程给详细复述下来,分享给想学习的同学,也方便自己复习,但后来发现该工作量太大,加上作业太多没有过多的时间去写。所以就想把自己在学习的过程中多遇到的好的文章进行汇总,避免重复性的工作,因为我感觉有的文章的介绍和配图写的非常好,再次重复也没有意义。本文里我会将文章的链接附上,如有侵权,敬请告知!

    因为最近要完成课程作业,实现AES128加解密,本以为就是一个简单的算法实现,后来发现AES加密的每一步都挺难,而且都涉及到我没听过的概念,所以最近看了很多帖子、资料。最终终于能够解决这个问题。关于AES算法的介绍,网上有很多的帖子,所以我就不进行赘述了,我只是希望将我遇到的一些比较难以理解的点进行详细的叙述。

    实现AES算法主要包括以下学习步骤:

    1. GF(2^8)域上的多项式运算
    2. 扩展的欧几里德算法
    3. 生成S盒
    4. 生成逆S盒
    5. S盒置换
    6. 行移位
    7. 列混合
    8. 生成秘钥
    9. 循环加密

    其中1、2、3、4步都跟S盒生成有关,根据我所看的一些博客,S盒的生成涉及到数论的基础知识。如果没有基础的话,1、2是要专门去学习的,我在这两步上花费了很多时间。但是在网上也可以找到很多AES算法,他们用的是现成的S盒,没有前4步,直接用现成的S盒置换,这样相对会容易一些。但是本着刨根问底和多学习知识的原则,我还是去学习了S盒的生成方式。第5步就是将每一个字符进行查表替换,没有什么难以理解的地方,所以相对而言比较容易。第6步应该是整个过程当中最简单的一步了,就是进行一个循环移位。第7步列混合涉及到矩阵和多项式的乘法,所以还是有一定难度,。。。

    如果想从整体上了解AES加密的完整过程,那么下面几篇文章不管从叙述还是插图上来看都是很不错的,几篇文章介绍的方式不同,但是原理都是一样的,对比结合着看会更有帮助:

    https://www.cnblogs.com/block2016/p/5596676.html

    https://blog.csdn.net/u012721519/article/details/79612128

    https://www.cnblogs.com/luop/p/4334160.html

    http://www.alonemonkey.com/2016/05/25/aes-and-des/

    但是仅从这几篇文章来看的话,对于像我这样的小白而言还是没有办法实现的,因为各个步骤介绍的并不具体,尤其是对于缺少基本数学知识学习的同学很难理解。所以这几篇文章可以作为整体进度的把控,接下来看怎么一步步学习实现。

         S盒

    我在学习这个算法的时候,在S盒的生成及置换上花费的时间是最多的。可能是因为基础较差,所以需要学习的东西比较多,所以我将这一部分进行了逐项的划分。关于S盒的生成及置换,这篇博客进行了非常详细的介绍,但是有一些东西我还是没明白,所以又参考了很多其他文章,才把这一部分搞明白。建议初学者以这篇博客为基础进行学习:

    https://blog.csdn.net/u011516178/article/details/81221646

    下面进行分步的介绍。

          GF(2^8)域上的多项式计算

    因为整个过程很多,所以我决定分为多个文章分别进行叙述,首先是GF(2^8)域上的多项式计算,因为以前也没有学过相关知识,很多概念都是第一次见到,所以这部分花了很长时间去学习。在学习这个之前,我们需要知道为什么去学习这个东西,AES加密中的哪一步用到了该知识点呢?

    S盒的置换就是将0~2^8中的任意一个字节置换为另外一个,置换的原则是将该元素置换为在GF(2^8)域上的乘法逆元,什么是GF(2^8)域?什么又是逆元呢?这些定义的准确数学描述我不太懂,根据本次应用,我可以给出粗略说明,GF(2^8)有限域大概就是指定义在该域中的数值经过定义在该域上的函数运算,其结果也都在该域内, 借用网上的一个例子进行说明:

    那什么又是乘法逆元呢,形如:

    (a\cdot a_{-1} ) \% p=1

    其中p为有限域的范围,这里按理说应该为2^8,但是却不能取这个数,因为2^8并不与其内的每一个数互质,所以只能选一个更大的质数(具体原因请参考扩展的欧几里德算法),AES算法中p的值选的是0x11B, 我也不知道为什么,可能是约定俗成的吧,因为如果想找一个稍微比255大的质数,不知道为什么要取293(0x11B)。a 为有限域内的整数,那么 a_{-1} 即为 a 在有限域上的逆元。至此,我们知道逆元是什么,但是具体怎么去求解还不太清楚,这一部分请参照扩展的欧几里德算法

    我接下来继续说GF(2^8)域上的多项式运算,因为把基本的运算搞清楚是计算GF(2^8)域上乘法逆元的前提,该域上的加减乘除运算是与传统的运算所不同的,具体的多项式运算请参考GF(2^8)域上的多项式运算。当然,也可以先学习扩展的欧几里德算法,然后再学习该部分,实现的时候将欧几里德算法中的四则运算换成GF(2^8)域上的多项式运算就行了。关于GF(2^8)域的计算介绍参考以下几篇博客介绍:

    https://blog.csdn.net/luotuo44/article/details/41645597

    https://blog.csdn.net/shelldon/article/details/54729687

    http://abcdxyzk.github.io/blog/2018/04/16/isal-erase-3/

    在四则运算中,加减运算就是简单的异或运算,很简单。而乘除运算则是以乘法运算为基础,所以四则运算中最主要的是理解乘法的运算,这篇https://blog.csdn.net/bupt073114/article/details/27382533文章详细介绍了乘法运算,以及其实现。

    拓展的欧几里得算法

    待掌握了GF(2^8)域的运算知识后,应该去学一下拓展的欧几里得算法,对于该算法,上面所给出的关于S盒生成的综述博文里已经参考相关教材进行了非常详细的论述,所以关于这部分知识可以同样参考这篇博文(参考文献10),

    还可以参考以下这篇博客:

    https://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html

    如果还不明白,也可以自行查找其他关于拓展欧几里得算法的介绍。

    S盒生成及置换

    关于S盒的生成及置换,同样参考文献10,该文章已经进行了非常详尽的描述与代码实现。待自己完成后也可以参考博客中的结果进行检验。

    行移位

    行移位就是对每行数据进行相应的循环移位,没有难以理解的地方,应该是整个加密过程最简单的部分,关于移位的规则,可以参考文献1、2、3、4,均有详细的图示介绍。下图来源于文献4:

    列混合

    列混合就是将数据矩阵乘上一个矩阵,解密的时候乘上原矩阵的逆矩阵进行解密,秩序要按照步骤一步步来即可,同样没有难以理解的地方,按照参考文献1、2、3、4的介绍进行操作就没有问题。关于列混合还可以参照这篇专门介绍的文章[11],其对于列混合又专门的介绍与实现,而且还有检验数据。下图参照文献4中图片:

    密钥生成

    密钥的生成过程稍微有些麻烦,需要仔细参考规则,避免搞错,但是只需要理解操作规则即可,不需要理论理解,还好参考文献3、4中都有非常生动的图示。下图来源于文献4:

    循环加密

    循环加密就是对上述过程重复进行若干次。具体实现参照文献1、2、3、4。

    解密

    解密过程就是将上述的过程反过来执行一遍,原本置换的就置换过来;原本移位的就反向移过来;原本乘上矩阵的就乘上她的逆矩阵。。。上面关于每个加密过程的参考文献都有相应的解密过程。

    实现

    关于AES128的加密完整实现,可以参照代码https://github.com/xinyu-yang/AES128-CBC,此代码的实现几乎都是参照上文的介绍,唯一不同的是在加密的时候采用了CBC模式,具体什么是CBC加密模式,如果不清楚的可以自行百度。如果有时间我也会把这部分补全。

     

    参考文献:

    1、https://blog.csdn.net/zhjchengfeng5/article/details/7786595

    2、https://www.cnblogs.com/block2016/p/5596676.html

    3、https://blog.csdn.net/u012721519/article/details/79612128

    4、https://www.cnblogs.com/luop/p/4334160.html

    5、http://www.alonemonkey.com/2016/05/25/aes-and-des/

    6、https://blog.csdn.net/luotuo44/article/details/41645597

    7、https://blog.csdn.net/shelldon/article/details/54729687

    8、http://abcdxyzk.github.io/blog/2018/04/16/isal-erase-3/

    9、https://blog.csdn.net/bupt073114/article/details/27382533

    10、https://blog.csdn.net/u011516178/article/details/81221646

    11、https://blog.csdn.net/u012620515/article/details/49893905

    12、https://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html

     

    展开全文
  • AES128加密程序

    2015-04-13 21:47:25
    AES字节形式的编程实现,提高效率的实现方法
  • iOS AES128加密解密

    热门讨论 2014-11-27 19:35:09
    AES加密在iOS上面的实现,仅供学习参考,从别人那借鉴来的!
  • 自己优化过的适用于嵌入式的AES128加密,包含ECB,CBC,CFB,OFB,CTR模式包含ECB,CBC,CFB,OFB,CTR模式包含ECB,CBC,CFB,OFB,CTR模式
  • 内含: iOS_AES_128、Android_AES_128 两平台加密源代码,基于AES的ECB模式,选用了 zeropadding 填充,数据位为128
  • Python - MD5, AES128 加密

    千次阅读 2017-04-21 15:49:00
    Python - MD5, AES128 加密 Max.Bai 2017-04 1. MD5 加密 import hashlib src = 'sourcestringxxxxxxx' hlib = hashlib.md5() hlib.update(src) # py2.7 # python3 需要转码 # b = src.encode(encoding='...
  • PHP C++ aes128加密算法

    2017-01-23 12:17:27
    PHP与C++加密通讯使用的加密解密类
  • Android通过AES128加密解密字符串

    千次阅读 2013-09-23 09:19:56
    Android通过AES128加密解密字符串 package net.sf.andhsli.hotspotlogin; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey...
  • ios-AES128加密解密.zip

    2019-07-11 18:45:44
    朋友告诉我说弄了个AES128解密,只传钥匙不传偏移量,得到的结果和网站在线解析的结果不一样。所以我就自己弄了一个AES128的解密,希望能给有需求的朋友一些帮助。git地址是:...
  • 加密锁 Java 8中制作的简单AES128文件加密器。 您可以通过以下方式运行程序: java -jar CryptoLocker.jar "/Somedir/I/Like/To/Encrypt/" 仅用于娱乐。
  • 现在很多App在与服务器接口的请求和响应过程中,为了安全都会涉及到加密和解密的问题,如果不加的话就会是明文的,即使加了GZIP也可以被直接解压成明文。如果同时有Android和IOS的App的话、必须要保证加密和解密的...
  • jsAES128加密方法

    千次阅读 2019-08-22 23:33:52
    function getAesString(data,key,iv){//加密 var key = CryptoJS.enc.Utf8.parse(key); var iv = CryptoJS.enc.Utf8.parse(iv); var encrypted =CryptoJS.AES.encrypt(data,key, { ...
  • AES128加密解密以及遇到的问题

    千次阅读 2019-05-14 14:18:37
    由于工作需求,需要对一个字符串进行加密与解密的操作,自己在网上查了一下,发现AES对称加密算法非常符合我的需求。它的简单思路就是事先设置一个秘钥(比如放在配置文件中),然后根据这个秘钥对字符串进行加密与...
  • openssl的AES128加密总结

    千次阅读 2018-01-05 17:02:49
    AES加密基本原理: 1.把明文按照128bit拆分成若干个明文块。 2.按照选择的填充方式来填充最后一个明文块。 3.每一个明文块利用AES加密器和密钥,加密成密文块。 4.拼接所有的密文块,成为最终的密文结果。 ...
  • Java中宣部实名认证AES128加密

    千次阅读 2021-04-12 11:30:38
    最近在接中宣部的实名认证,加密终于搞过去了,给的文档也是蛮难阅读的,刚开始参照文档,后边直接参照平台示例写了,终于搞过去了, 在此记录下: import javax.crypto.Cipher; import javax.crypto.SecretKey; ...
  • ios AES128加密解密算法

    千次阅读 2014-09-06 09:12:31
    闲话不多说 直接上代码: ...+(NSString *)AES128Encrypt:(NSString *)plainText {  // int kCCKeySizeAES128;  // int kCCBlockSizeAES128;      char keyPtr[kCCKeySizeAES128+1];  memse
  • Qt使用AES128加密一段文字实例

    千次阅读 2019-02-26 00:00:23
    本实例使用了现成的Qt库:https://github.com/bricke/Qt-AES 主要代码: #include "mainwidget.h" #include "ui_mainwidget.h" #include "qaesencryption.h" #include &lt;...
  • 聊天项目中,在发送socket数据的时候使用到AES加密解密的过程,现在提出来,记录一下,方便以后使用. 传入的如果是data可以直接使用,如果是字符串,和data相比,只是多了一步转化.非常简单. 先来看传的是字符串的时候: + ...
  • aes128加密算法的GCM工作模式详解

    热门讨论 2010-04-09 09:22:44
    这个文档是在官方网站上下载的,讲述很详尽,还有很多加密数据的例子,方便验证自己的程序,不过是英文的 这个文档是在官方网站上下载的,讲述很详尽,还有很多加密数据的例子,方便验证自己的程序,不过是英文的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,042
精华内容 31,616
关键字:

aes128加密