精华内容
下载资源
问答
  • 由于JPEG标准对DC系数采用差分编码而对AC系数采用游程长度编码,算法将明文图像分成若干8×8子块,并在分块DCT对各子块AC系数和DC系数分别实施不同策略的加密变换。算法在DC系数加密过程中引入分段思想,在AC系数...
  • MD5加密算法流程

    千次阅读 2017-08-19 10:44:59
     第二:任意一段明文数据,经过散列以后,其结果必须永远是不变的。  前者的意思是可能存在有两段明文散列以后得到相同长度的结果,者的意思是如果我们散列特定的数据,得到的结果一定是相同的。

      MD5:Message-Digest Algorithm 5(信息-摘要算法),属于哈希散列算法一类,对于MD5而言,有两个特性是很重要的,
      第一:明文数据经过散列以后的值是定长的;
      第二:任意一段明文数据,经过散列以后,其结果必须永远是不变的。
      前者的意思是可能存在有两段明文散列以后得到相同长度的结果,后者的意思是如果我们散列特定的数据,得到的结果一定是相同的。
      MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的(32位)十六进制数字串)。


      算法原理:对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
      在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。


      Java实现MD5过程
      1、通过单例的构造方法获取MessageDigest实例,并指定加密算法类型;
      2、将需要加密的字符串加盐后转换成byte数组后进行随机哈希过程;
      3、MessageDigest对字节数组进行摘要,得到摘要字节数组;
      4、循环遍历生成的byte类型数组,让其生成32位字符串,然后拼接字符串得到MD5值;


      代码如下
      

    public class MD5Util {
    
        /**
         * 对指定的字符串进行MD5加密处理
         * @param password   待加密的原始密码值
         * @return MD5加盐加密后的密码值
         */
        public static String encodePassword(String password) {
            try {
                // 密码加盐处理,确保密码更加安全
                password = password + "neuyimi";
                // 获取MessageDigest实例,并指定加密算法类型
                MessageDigest digest = MessageDigest.getInstance("MD5");
                // 将需要加密的字符串转换成byte数组后进行随机哈希过程
                byte[] byteArray = password.getBytes();
                // 信息摘要对象对字节数组进行摘要,得到摘要字节数组
                byte[] md5Byte = digest.digest(byteArray);
                StringBuffer buffer = new StringBuffer();
                // 循环遍历byte类型数组,让其生成32位字符串
                for (byte b : md5Byte) {
                    int i = b & 0xff;
                    String str = Integer.toHexString(i);
                    if (str.length() < 2) {
                        str = "0" + str;
                    }
                    buffer.append(str);
                }
                return buffer.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return "";
        }
    }

      :MD5是不可逆的,也就是没有对应的算法,把转换后的MD5值逆向得到原始密码数据;下面要说但是了,但是如果使用暴力破解,那也没办法,毕竟网上大神很多,保不齐大神用什么方法就能逆向获取到原始密码;现在网上也有很多MD5解密工具,可以试试,简单的MD5加密后的密码还是可以解密的,但是如果加盐以后,很多就破解不了啦!

    展开全文
  • RSA加密的填充方式

    千次阅读 热门讨论 2021-03-12 09:57:07
    与对称加密算法DES,AES一样,RSA算法也是一个块加密算法( block cipher algorithm),其算法原理特点是总保持在一个固定长度的...处理的每组数据长度也是固定不变的(与RSA密钥模长相等)。 填充方式 ...

            与对称加密算法DES,AES一样,RSA算法也是一个块加密算法( block cipher algorithm),其算法原理特点是总保持在一个固定长度的块上进行操作。但跟DES,AES等算法不同的是,RSA算法的block length与key length相关,每次加密的块长度就是key length。RSA加密算法目前有多种填充模式。当明文长度大于key length时,要进行切割分组,然后填充。处理后的每组数据长度也是固定不变的(与RSA密钥模长相等)。

     

    填充方式

    待填充长度

    填充后长度

    RSA_NO_PADDING

    不填充

    和公钥等长

    RSA_PKCS1_PADDING

    至少RSA_size(rsa) - 11

    和公钥等长

    RSA_PKCS1_OAEP_PADDING

    RSA_size(rsa) - 41

    和公钥等长

     

     

            RSA加密常用的填充模式有三种:RSA_PKCS1_PADDING, RSA_PKCS1_OAEP_PADDING, RSA_NO_PADDING。假设现有RSA算法密钥长度为1024bit,则三种填充模式的填充效果如下所述。

     

    1.RSA_NO_PADDING填充模式

    当用户选择RSA_NO_PADDING填充模式时,如果明文不够128字节,加密的时候会在明文前面填充若干数据0,直至达到128字节。

    解密后的明文也会包括前面填充的零,用户需要注意把解密后的字段前向填充的零去掉,才是真正的明文。凌科芯安系列芯片支持RSA算法的芯片目前就是时钟这种填充方式。如果填充规则不符合要求,建议用户使用芯片加密前,先自行填充。

     

    2.RSA_PKCS1_PADDING填充模式

    当你选择RSA_PKCS1_PADDING填充模式时,如果明文不够128字节,加密的时候会在明文中随机填充一些数据,所以会导致对同样的明文每次加密后的结果都不一样。

    对加密后的密文,用户使用相同的填充方式都能解密。解密后的明文也就是之前加密的明文。

     

    EB = 00 || BT || PS || 00 || D ,其中D为消息

    BT(The block type块类型):

    BT=00 or 01 (私钥运算时)

    BT=02 (公钥运算时)

     

    PS(The padding string填充字符串):

    BT=00,PS由00组成;

    BT=01,PS由FF组成;

    BT=02,PS由伪随机生成,且非零;

    PS长度为Len(EB) - 3 - Len(D),最少是8字节。

     

    3.RSA_PKCS1_OAEP_PADDING填充模式

    RSA_PKCS1_OAEP_PADDING填充模式是PKCS#1推出的新填充方式,安全性最高,和前面RSA_PKCS1_PADDING的区别就是加密前的编码方式不一样。

    展开全文
  • md5是不可逆算法,只要保证算法不变,就能和数据库中md5相匹配。关于MD5加密!有什么用途呢?比如一个password认证,加密后存入数据库和不加密有什么区别? 比如我在pass字段中存入经过 md5加密后的密码!只不过是...

    1.密码
    可以当做密码验证,为了保证密码不在cmd5网站上破译,最好加盐及乱序,也可以只取一半md5的长度。md5是不可逆算法,只要保证算法不变,就能和数据库中的md5相匹配。关于MD5加密!有什么用途呢?比如一个password认证,加密后存入数据库和不加密有什么区别?
    比如我在pass字段中存入经过 md5加密后的密码!只不过是把用户提交的密码加密后存入pass字段!觉得和不加密没什么区别!
    因为用户输入的还是没经过加密的密码!提交后通过md5加密存入pass字段中,我觉得有画蛇添足的感觉!不知道md5到底在开发中做什么用!具体那些方面可以用到。
    首先因为是不可逆的所以在数据库里面看到的密码是无用的,你不是检验用户的密码,而是检验用户输入的密码经md5加密以后和数据库内的是否相符 这样就能做到你不希望你的邮件服务器的管理员知道你的信用卡密码吧!
    2.搜索
    以搜索为例,你输入“csdn 博客” 和 输入“博客 csdn”的结果是不一样的,因为你搜索的时候他们对应的md5是不一样的,他们可以根据这个md5去查询内容。
    3.版权
    当一个视频或者音频创作出来的时候它的md5是唯一的,若以后有翻录等版本出来,即使画质,声音,文件名都一样,但是他们的md5验证是不一样的,所以可以验证版权。还比如用某一账户下载的视频它的账户信息也回和视频一起md5操作,如果以后这个人私自传播通过md5就可以去数据库中查找泄露版权的情况。
    4.文件完整性的校验
    当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象。

    5.文件上传
    文件上传时会上传文件的信息此时将文件的md5上传,服务器中存储这个md5值,并存储这个md5值所对应的已上传字节长度,比如未上传对应为0,已上传对应为-1,已上传200字节就对应200,这个上传的时候可以匹配到这个文件在服务器中的状态,方便做断点续传,只要源文件没有更改,即使换个名字,换个账户都可以在服务器找到对应的文件,所以当服务器中有已经上传完毕的此文件时,别人再上传这个文件就可以实现秒传。
    END

    展开全文
  • 情报加密

    千次阅读 2017-12-15 21:09:54
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入格式 输入一行,包含一个字符串,...

    试题描述 

    在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。

    输入格式
    输入一行,包含一个字符串,长度小于80个字符。
    输出格式
    输出每行字符串的加密字符串。
    样例输入
    Hello! How are you!
    样例输出
    Ifmmp! Ipx bsf zpv!
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char str[100];
        while(gets(str)!=NULL)
        {
            int i,length=0;
            length=strlen(str);
            for(i=0;i<length;i++)
            {
                if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
                        str[i]=(int)str[i]+1;
                if((int)str[i]>122)
                    str[i]=(int)str[i]-57;
            }
            puts(str);
            printf("\n");
        }
        return 0;
    }
    

    第二种方法

    #include <stdio.h>
    void encrypt(char str[ ],int k);
    int main()
    {
        char str[100] ;
        int key=1 ;
        while(gets(str)!=NULL)
        {
            encrypt(str, key) ;
            printf("%s\n", str);
        }
        return 0;
    }
    void encrypt(char str[ ], int key)
    {
        int i;
        for (i = 0; str[i] != '\0'; i++)
        {
            if (str[i]>='A'&&str[i]<='Z')
                str[i]='A'+(str[i]-'A'+key)%26;
            if (str[i]>='a'&&str[i]<='z')
                 str[i]='a'+(str[i]-'a'+key)%26;
        }
        return;
    }


    展开全文
  • 序 去年一篇文章提到这样给用户密码进行加密:采用HASH+SALT(一人一密,一站一密:即在用户...前提 0、基本加密算法不变:MD5/SHA512。这里是指后者,对字符串加密后的密文,长度为128。 1、“朴素”意思是对sa
  • 安全部分 数据会受到偷听,假冒,篡改,事否认区别 ...不管输入多长输出hash值长度不变 不可逆推导 MD5和SHA1有安全隐患 加密:用密钥对数据进行数值计算,使第三方不认识 加密解密都用相同密钥共享密...
  • TEA,XXTEA介绍,对称加密

    2019-09-21 20:21:18
    总结:在使用加密时候,我们可以加入随机数,这样相同明文,每次加密后得到不同密文,同时可以在密文中加入密文有效期,控制密文有效时间长度。 针对有功能扩展使用,很好思想。 TEA对 64 位数据加密...
  • 字符串加密

    2021-01-05 21:33:14
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • (简单说就是基本上不会出现加密后重复内容) 2.密码可以是任意长度(当然小于要加密文件长度以内是最好)任意有效字符(中英符...等) 3.可以用一个文件当作密码去加密另一个文件 4.支持任何格式文件...
  • 加密与安全学习笔记

    2020-10-27 11:48:31
    原理是把3字节二进制数据按6bit一组,用4个int整数表示,然后查表,把int整数用索引对应到字符,得到编码后的字符串。 Base64编码可以把任意长度的二进制数据变为纯文本,且只包含A`Z`、`a`z、0~9、+、/、=这
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • 目录Git 基本原理哈希哈希算法特点Git...不管输入数据量多大,输入同一个哈希算法,得到的加密结果长度固定 哈希算法确定,输入数据确定,输出数据就保持不变 哈希算法确定,输入数据有变化,哪怕变化很小,输出...
  • NOI1.7.9密码翻译

    2020-02-19 10:31:51
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • C/C++编程学习 - 第18周 ③ 密码翻译

    万次阅读 2021-02-02 09:44:35
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从 a-y,A-Y 字母用其继字母替代,把 z 和 Z 用 a 和 A 替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入格式 输入一行,包含一个字符...
  • 密码翻译

    2020-05-05 14:45:27
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从 a-y,A-Y 字母用其继字母替代,把 z 和 Z 用 a 和 A 替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入格式 输入一行,包含一个...
  • 09:密码翻译

    2021-04-17 10:47:59
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入 输入一行,包含一个字符串,长度小于80...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...
  • 1136:密码翻译

    2019-12-10 18:42:01
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...
  • 2021-05-20

    2021-05-20 16:57:11
    我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 输入格式: 输入一行,包含一个字符串,...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...
  • 我们给出一种最简的的加密方法,对给定一个字符串,把其中从a-y,A-Y字母用其继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。 【输入】 输入一行,包含一个字符串,长度...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
热门标签
关键字:

加密后长度不变的算法