精华内容
下载资源
问答
  • 发现使用aes-128-cbc,明文长度超过288后,后面的密文会丢失; 发现使用aes-256-cbc,明文长度超过560后,后面的密文会丢失; 如果使用分段加密,比如说288 一段加密,并且保持IV值不变。 ``` BLOCK_SIZE ...
  • 变大就变大吧,对于日常使用APP开发或者服务端开发而言,大个几k字节是无所谓的,但是如果是使用RF(射频)通信,那么大几个字节就会导致通信失败率的增加,所以对于这样的场景,你就需要确保密文和明文一样长,...

    加密之后会变大的问题

      做过加密的人都应该有“加密之后文件会变大”的经验。变大就变大吧,对于日常使用和APP开发或者服务端开发而言,大个几k字节是无所谓的,但是如果是使用RF(射频)通信,那么大几个字节就会导致通信失败率的增加,所以对于这样的场景,你就需要确保密文和明文一样长,最好是还能短一点。
      由于短一点是压缩算法的功劳,和加密算法本身没有关系,我们这里不做分析,今天我们以openssl的命令行工具为例来学习如何确保密文长度等于明文长度。

    为啥密文会比明文长

      为啥加密之后就会边长呢?为了更安全!那么为了更安全长到哪里了?
        1. 长在填充;
        2. 长在salt;
      填充主要是为了解决分组加密,明文长度不是分组的整数倍的问题,为了简化填充规则,如果明文是分组的倍数,就填充一个整的分组。
    如何确保明文和密文的长度是一致的
    上图就是一个明文是128bits的aes-128-cbc的加密样例,填充了整整一个128bits的填充块。
      salt是作为秘钥和IV生成的一个随机因子,为了解决相同的明文和秘钥生成相同的密文的问题,由于salt必须参与到运算中,所以salt通常是以明文的形式拼接在明文的最前面,salt通常是16个字节的长度,前8字节是个固定的magic数,后8个字节是随机数,这样有salt的密文至少会增加一个长度是16个字节的明文头部信息。
    如何确保明文和密文的长度是一致的
    上图就是一个有salt的,明文是一个字节的密文是16+1个字节的样例输出。

    如何控制让密文和明文长度一致呢

      既然增长是由于填充和salt导致的,那么要保证一样长,那就需要去掉填充和salt,当然去掉填充的前提需要明文的长度是分组的倍数,要不然加密会报错的。
    如何确保明文和密文的长度是一致的
    上图是一个nopad和nosalt的截图,我们在看一个对比图,如下:
    如何确保明文和密文的长度是一致的

    特别提醒小心-a的参数

      -a在参数在openssl里面是对加密或者解密结果的base64的处理,如果是加密就是base64编码,反之是解码。base64会把没3个字节编码为4个字节的科输入字符,如果不小心用到这个选项,你会发现密文长度填充了不少。
      重要的事情说三遍,用了-a会变长!用了-a会变长!用了-a会变长!

    进一步的学习资料推荐

      使用openssl做AES的加密
      使用openssl做SSL/TLS/HTTPS的实验

    转载于:https://blog.51cto.com/makofly/2122601

    展开全文
  • AES256JNCryptor加密后的密文长度

    万次阅读 2015-03-20 15:13:09
    从文档看...由于采用了256位AES加密,使用了CBC模式加PKCS #5补齐,所以AES的密文字节长度 = (明文长度 +1) / 16 * 16(即比明文长度大的最小的16的倍数)。AES256JNCry
    从文档看(http://jncryptor.googlecode.com/svn/trunk/javadoc/index.html),加密后的密文不但包括AES密文,还包括了前后一共66个字节的附加信息。

    由于采用了256位AES加密,使用了CBC模式加PKCS #5补齐,所以AES的密文字节长度 = (明文长度 +1) / 16 * 16(即比明文长度大的最小的16的倍数)。

    AES256JNCryptor返回的密文长度则是在此基础上再加上66个字节。

    返回的密文是二进制数据,无法直接显示。如果需要进一步编码为可显示字符串,则需进行BASE64编码或者十六进制编码。编码后的数据长度会进一步增加(BASE64是增长为4/3倍起的最小的4的倍数,十六进制编码是增长为2倍)。比如,对原文长度在32-47个字节之间的明文,经过AES256JNCryptor加密后的密文长度就是114个字节,再做一次BASE64编码转换成可显示字符就成了152个字符。

    原明文长度  -> AES密文长度 -> BASE64编码长度
    -------------------------------------------------------------------
     0-15 chars -> 82 bytes -> 112 chars
    16-31 chars -> 98 bytes -> 132 chars
    32-47 chars -> 114 bytes -> 152 chars
    48-63 chars -> 130 bytes -> 176 chars
    64-79 chars -> 146 bytes -> 196 chars
    ...
    112-127 chars -> 194 bytes -> 260 chars
    展开全文
  • 原有的AES加解密类的基础上封装了对文本加解密和txt文件加解密,实现任意字符密钥长度和加密文本不限字符数量
  • AES_cbc_encrypt( in,out,length,&ckey,ivec, AES_ENCRYPT); sprintf_s(out,"%X",out); SetDlgItemText(hwnd,IDC_EDIT4,out); } ![![图片说明]...
  • 本人最近在做一个利用AES加密算法的激活系统,在写好AES算法后,发现算法本身是把16个字节明文数据转换成另一个值不同的16字节密文数组,但存在一个小小的问题,如果想要由全是数字或者字母的明文生成也全是数字或者...

     本人最近在做一个利用AES加密算法的激活系统,在写好AES算法后,发现算法本身是把16个字节明文数据转换成另一个值不同的16字节密文数组,但存在一个小小的问题,如果想要由全是数字或者字母的明文生成也全是数字或者字母的密文,就有些问题了,即时你的明文全是字母,在加密后也会变成一堆;乱码,充斥着各种符号,不易输入输出,本文提供了一个小小的办法;

             我是在Cortex m3处理器上做开发,所以明文获得方式如下:

    注:以下程序部分只显示接口函数;

    1:首先利用RTC获取系统时间:

    en_result_t get_system_time(uint8_t*year,uint8_t *month,uint8_t *day,uint8_t *hour,uint8_t *minute,uint8_t*second);

    2.以系统时间作为随机函数的种子,利用随机函数生成一串16个字节的字符串,这个时候生成字符串含有大量的符号、数字和字母组成,

    不易输出和显示。

    void generate_random_code(uint8_t*random_code);

    3.我采用对这16个字节的字符串中的每个字符取出来,对其ASICC码值进行对26取余操作,为什么对26进行取余?因为我要把这16个字节的字符串全都变成由大写字母组成,大写字母的ASICC值范围是[65,90];我们只需要把每个字符串进行26取余再加65,就可以全都变成由大写字母组成的随机序列拉,其他数字和小写字母同理。实现函数如下:

    /*将plen个字节转成大写字母*/

    void byte_convert_capital(uint8_t*string,uint8_t plen)

    {

             uint8_tloop;

             for(loop= 0;loop < plen;loop++)

             {       

                       *string= (*string)%26 + 65;

                       string++; 

             }

    }

    /*首先利用随机数产生函数产生16个字节的*/

    void generate_valid_code(uint8_t*valid_code)

    {

             generate_random_code(valid_code);

             byte_convert_capital(valid_code,16);

    }

    4.然后调用AES加密接口函数,对由16个大写字母构成的字符串进行加密操作,AES加密函数接口如下:

             /**

     * 参数 p: 明文的字符串数组。

     * 参数 plen: 明文的长度,长度必须为16的倍数。

     * 参数 key: 密钥的字符串数组。

     */

    void aes(char * p, uint32_t plen, char *key);

    这时候得到的密文会含有许多符号,如:%!(】)【】等等这类字符,这不是我们想要的,这个时候我们可以再次调用第3步中的函数byte_convert_capital();把得到的字符串全转换成大写字母构成,如此便可以实现由大写字母字符串加密得到也是大写字母构成的字符串拉>>0.0<<

    展开全文
  • 网上很多AES其实并不对,给出的加密结果其实是解密不出来的,书本上的AES算法描述也不是很清楚。
  • 【什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?】 每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端...

    这里是修真院后端小课堂,本篇分析的主题是

    【什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?】

    每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析后端知识/技能,本篇分享的是:

    【什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?】

     

    大家好,我是IT修真院深圳分院第10期的JAVA学员,一枚正直纯洁善良的java程序员。

    今天给大家分享一下,修真院官网Java任务5,深度思考中的知识点—什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?


    1.背景介绍


                1.1    什么叫密码
                密码是一种用来混淆的技术,使用者希望将正常的(可识别的)信息转变为无法识别的信息。但这种无法识别的信息部分是可以再加工并恢复和破解的。密码在中文里是“口令”(password)的通称。  


    2.知识剖析

               2.1 什么是明文密码?   
                “明文密码”(Cleartext Password),即传输或保存为明文的密码。具体是指保存密码或网络传送密码的时候,用的是没有隐藏、直接显示的明文字符,而不是经过加密后的密文。如密码为123,那么密文密码是***,明文密码则是123。从信息安全的角度出发,任何网络服务都不应该保存或发送明文密码。

                2.2    什么是密文密码? ? 
                
                    密文是加了密的的文字,明文是加密之前的文字。密文是对明文进行加密后的报文。

                 2.3    为什么不允许在数据库里明文保存密码?
                 用明文保存密码有很大的信息安全隐患。
    一般数据库里还存有用户的姓名、手机号、用户名等信息,一旦数据库发生泄漏,再加上用户的明文密码,攻击者就可以用用户名和密码去其他网站尝试登陆(因为往往用户会将多个网站的密码根据习惯设成一样的),一旦登陆成功,就会造成很严重的后果。
                
                2.4    一般使用的加密方式有哪些?:
             2.4.1.MD5加密(1)
                  MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,
                  并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新
                  计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
                  
              2.4.一般使用的加密方式有哪些?
                2.4.1.MD5加密(2)
                MD5算法具有以下特点:
                1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
                2、容易计算:从原数据计算出MD5值很容易。
                3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
                4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
               
             2.4.一般使用的加密方式有哪些?
                2.4.2.DES加密
                DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的
                统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将
                每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速
                地扩展到较多的密文位中,以防对密钥进行逐段破译。
                
              2.4.一般使用的加密方式有哪些?
                2.4.3.RSA加密
                它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,
                RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法
                相结合的方式,即信息采用改进的DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息
                摘要。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,
                经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。
                
               2.4.一般使用的加密方式有哪些?
                2.4.4.对称加密算法
                加密者和解密者使用相同的密码,这种方式的优点是加解密效率高,缺点是安全系统偏低,因为中除需要传递密钥,所以有被截获的风险。
                传递密钥的过程常需要和对称加密方式配合使用,如上所述。
                常见的这种方式有 DES,AES.
                优点:算法公开、计算量小、加密速度快、加密效率高、可逆
                缺点:双方使用相同钥匙,安全性得不到保证
                现状:对称加密的速度比公钥加密快很多,在很多场合都需要对称加密
                
                2.4.一般使用的加密方式有哪些?
                2.4.5.RSA加密(非对称加密算法)(1)
                非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
                非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
                公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,
                那么只有用对应的公开密钥才能解密
                
                2.4.一般使用的加密方式有哪些?
                2.4.5.RSA加密(非对称加密算法)(2)
                特点:
                非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快    
                对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,
                而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了
                
                2.5.MD5加密的弊端?如何解决?
                由之前MD5的实现方法可知,任何一个相同文件、字符串生成的MD5值都是一样的。比如"123456"的MD5值任何时候生成的都是
                "e10adc3949ba59abbe56e057f20f883e"并且,随着现在计算机技术的不断发展,可以通过MD5值去逆推到原来的明文密码。因此
                就需要在加密时在给它一个随机生成的值,掺到原密码中进行加密。这个值就叫盐值。

     

    3.常见问题


                如何对密码进行MD5加盐加密


           
    4.解决方案


                见编码实战


     5.编码实战
           


    6.扩展思考


                6.1    明文密码泄露的危害?
                
                   可能会被不法分子通过撞库的方式去其他网站获取更多的个人信息。
                    
                      2014年12月25日,12306网站用户信息在互联网上疯传。对此,12306官方网站称,网上泄露的用户信息系经其他网站或渠道流出。据悉,此次泄露的用户数据不少于131,653条。该批数据基本确认为黑客通过“撞库攻击”所获得。
                    
          
                6.2 如何避免出现这种情况?
                
                   一方面,网站运营者要保护好自己的数据库,并且在保存用户关键信息时要进行加密保存。
                另一方面,我们在注册不同网站时注意设置不同的密码,尽量不要出现一个账号密码就能登录所注册的所有网站的情况。
           

                6.3.密码为什么不能用Hash存储? 
                单向Hash算法(MD5, SHA1, SHA256等)可以保证管理员几乎不能恢复原始密码。但它有两个特点:
                1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要。
                2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算。
                


    7.参考文献


                CSDN
                百度百科
           

          
    8.更多讨论

     

               8.1    明文密码泄露的危害?
                
                   可能会被不法分子通过撞库的方式去其他网站获取更多的个人信息。
                    
                      2014年12月25日,12306网站用户信息在互联网上疯传。对此,12306官方网站称,网上泄露的用户信息系经其他网站或渠道流出。据悉,此次泄露的用户数据不少于131,653条。该批数据基本确认为黑客通过“撞库攻击”所获得。
                    
          
                8.2 如何避免出现这种情况?
                
                   一方面,网站运营者要保护好自己的数据库,并且在保存用户关键信息时要进行加密保存。
                另一方面,我们在注册不同网站时注意设置不同的密码,尽量不要出现一个账号密码就能登录所注册的所有网站的情况。
           

                8.3.密码为什么不能用Hash存储? 
                单向Hash算法(MD5, SHA1, SHA256等)可以保证管理员几乎不能恢复原始密码。但它有两个特点:
                1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要。
                2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算。

     

    今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

    ------------------------------------------------------------------------------------------------------------
    “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。

    技能树.IT修真院

    展开全文
  • Java AES 加密简单使用

    2020-07-31 14:16:14
    AES 加密的工具类 AES 加密工具类测试 AES 密文明文多出 16 字节的原因
  • 今天遇到这样一个问题,将客户端中的一个密码存储到文件中以供下次...所以最后选择了openssl的aes算法,然而aes可行然而用遇到另外一个问题,aes编码字符串之后是乱码,只能用16进制数来显示,这样我使用的glib的k...
  • 这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析...【什么叫明文,什么叫密文,为什么不允许在数据库里明文保存密码?】 大家好,我是IT修真院深圳分院第10期的JAVA学员,一枚正直纯洁善良的java程...
  • AES加密算法的详细介绍与实现

    万次阅读 多人点赞 2017-02-19 08:53:54
    AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下...
  • AES加密算法

    2021-01-13 14:51:19
    1、AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文长度128bit。 这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块...
  • AES加密解密

    2017-11-15 20:10:45
    AES作为一个块加密算法 [block cipher],每次加密的明文大小固定为128bit,所以明文比较长的时候需要先分组再加密然后整合,这个过程中就会出现两个重要的因素:模式 填充方式。     1. 模式 分组密码工作...
  • 而安卓创建AES密钥(这个密钥也是在so文件里面),并用该AES密钥加密待传送的明文数据,同时用接受的RSA公钥加密AES密钥,最后把用RSA公钥加密后的AES密钥同密文一起通过Internet传输发送到服务器。当服务器收到这个被...
  • AES

    千次阅读 2018-06-27 17:45:13
    高级加密标准(英语:Advanced Encryption Standard,缩写:AES)是一种对称加密算法,加密时需要使用密钥,密钥长度则可以是128,192或256比特,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES是DES的...
  • 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法,对称加密算法即加密解密的过程使用同一个秘钥进行加密。 需求分析 前端post账号密码时,需要对密码进行加密,而不是使用密码明文进行传输...
  • AES算法图文讲解

    千次阅读 2015-06-25 14:17:27
    AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个铭文块长度128bit。 这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块...
  • AES是一套对称密钥的密码术,目前已广泛使用,用于替代...对称密钥加密法主要基于块加密,选取固定长度的密钥,去加密明文中固定长度的块,生成的密文块与明文长度一样。显然密钥长度十分重要,块的长度也很重要。
  • pin密文是1.1+1.2 1+2=3,最后12进行二进制异或,3出表示07 密码是什么后面异或 主密加密工密,工密加密密码 密码加密就好比,方程式,也可以说实一种投影,就是密码通过工作密码进行加密...
  • Linux AES加密

    2020-11-19 11:28:43
    一、AES ECB 256 加密... Ciphertext:密文 长度是明文长度的两倍 key:密钥. */ int AES256_encrypt( unsigned char *Plaintext,unsigned char *Ciphertext,signed char *userkey) { //unsigned char md[16]; char
  • //加密: //密钥 把数据装入二进制(更安全) $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");... //看下二进制数据长度 $key_size = strlen($key); echo "Key size:
  • AES加密解密——使用openssl编程

    千次阅读 2012-07-27 07:46:22
    AES是一套对称密钥的密码术,目前已广泛使用,用于替代...对称密钥加密法主要基于块加密,选取固定长度的密钥,去加密明文中固定长度的块,生成的密文块与明文长度一样。显然密钥长度十分重要,块的长度也很重要。
  • Java使用AES加密解密

    千次阅读 2018-09-05 15:54:39
    AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件软件实现。1998年NIST开始AES第一轮分析、测试征集,共产生了15个候选算法...
  • AES加密过程详解

    万次阅读 多人点赞 2018-07-03 16:55:58
    AES算法流程: AES加密过程涉及到4种操作,...算法中16个字节的明文密文和轮密钥都以一个4x4的矩阵表示。 注意:前9次的加密过程是一样的,而最后一次的加密过程是没有列混淆的。 1.字节替换:字节代替...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,121
精华内容 3,248
关键字:

aes密文和明文长度