精华内容
参与话题
问答
  • AES加密算法备忘

    万次阅读 2018-09-24 11:55:48
    AES加密算法备忘原理样例 原理 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全...

    AES加密算法备忘

    原理

    密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
    该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 “Rhinedoll”)
    AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。

    对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。
    AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。
    AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES.
    AES加密数据块大小最大是256bit,但是密钥大小在理论上没有上限。AES加密有很多轮的重复和变换。大致步骤如下:

    1. 密钥扩展(KeyExpansion)
    2. 初始轮(Initial Round)
    3. 重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey
    4. 最终轮(Final Round),最终轮没有MixColumns。

    样例

    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;

    public abstract class AesHelper {

    /**
     * 加密
     *
     * @param content 需要加密的内容
     * @param salt    加密密码
     * @return
     */
    public static byte[] encrypt(String content, String salt) {
        try {
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(salt.getBytes());
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, random);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器
            byte[] byteContent = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(byteContent);
            return result; // 加密
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 解密
     *
     * @param content 待解密内容
     * @param salt    解密密钥
     * @return
     */
    public static byte[] decrypt(byte[] content, String salt) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(salt.getBytes());
            kgen.init(128, secureRandom);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器
            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(content);
            return result; // 加密
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static String bytesToHexString(byte[] src) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < src.length; i++) {
            String hex = Integer.toHexString(src[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }
    
    public static String encryptToStr(String content, String password){
        return bytesToHexString(encrypt(content,password));
    }
    
    public static byte[] decrypt(String content, String keyWord) {
        return decrypt(hexStringToBytes(content), keyWord);
    }
    
    public static byte[] hexStringToBytes(String hexString) {
        if (hexString.length() < 1)
            return null;
        byte[] result = new byte[hexString.length() / 2];
        for (int i = 0; i < hexString.length() / 2; i++) {
            int high = Integer.parseInt(hexString.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexString.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }
    

    }

    public class TestMain {
    public void main(){
    String content = “carl.zhao”;
    String Key = “http://www.csdn.net”;

        //加密
        String encryptResult = AesHelper.encryptToStr(content, Key);
    
        //解密
        byte[] decryptResult = AesHelper.decrypt(encryptResult,Key);
        Assert.assertEquals(content, new String(decryptResult));
    }
    

    }

    输出结果:
    @@eac7cf4369966a656d1355939632cab1611696f7aed973b20f13e8a0e08f1b2ae51d24b41678e12267cd7d8e549674b0fef081fbc0557ec7a7f1eb37bf28e4645a0f6863dae03c2278ea668b03b50102@@

    展开全文
  • /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。 /// </summary> public class RsaEncrypt { /// <summary> /// 获取加密/解密对 /// 给你一个,是无法推算出另外一个的 /// /// ...
    /// <summary>
        /// RSA ECC
        /// 可逆非对称加密 
        /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。
        /// </summary>
        public class RsaEncrypt
        {
            /// <summary>
            /// 获取加密/解密对
            /// 给你一个,是无法推算出另外一个的
            /// 
            /// Encrypt   Decrypt
            /// </summary>
            /// <returns>Encrypt   Decrypt</returns>
            public static KeyValuePair<string, string> GetKeyPair()
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                string publicKey = RSA.ToXmlString(false); //在C#中只实现了 公钥加密  私钥解密  如果有需要其他场景的,需要引入一个第三方dll
                string privateKey = RSA.ToXmlString(true);
                return new KeyValuePair<string, string>(publicKey, privateKey);
            }
    
            /// <summary>
            /// 加密:内容+加密key
            /// 
            /// </summary>
            /// <param name="content"></param>
            /// <param name="encryptKey">加密key</param>
            /// <returns></returns>
            public static string Encrypt(string content, string encryptKey)
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(encryptKey);
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                byte[] DataToEncrypt = ByteConverter.GetBytes(content);
                byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);
                return Convert.ToBase64String(resultBytes);
            }
    
            /// <summary>
            /// 解密  内容+解密key
            /// </summary>
            /// <param name="content"></param>
            /// <param name="decryptKey">解密key</param>
            /// <returns></returns>
            public static string Decrypt(string content, string decryptKey)
            {
                byte[] dataToDecrypt = Convert.FromBase64String(content);
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(decryptKey);
                byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false);
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                return ByteConverter.GetString(resultBytes);
            }
    
    
            /// <summary>
            /// 可以合并在一起的,每次产生一组新的密钥
            /// </summary>
            /// <param name="content"></param>
            /// <param name="encryptKey">加密key</param>
            /// <param name="decryptKey">解密key</param>
            /// <returns>加密后结果</returns>
            private static string Encrypt(string content, out string publicKey, out string privateKey)
            {
                RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
                publicKey = rsaProvider.ToXmlString(false);
                privateKey = rsaProvider.ToXmlString(true);
    
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                byte[] DataToEncrypt = ByteConverter.GetBytes(content);
                byte[] resultBytes = rsaProvider.Encrypt(DataToEncrypt, false);
                return Convert.ToBase64String(resultBytes);
            }
        }
    
    
    展开全文
  • 发文章加密教程

    万次阅读 2020-03-27 09:16:57
    s="""躲避审核的风险""" s1=list(s) index_a=dict() for i in s1: index_a[s1.index(i)]=i print(index_a)
    s="""躲避审核的风险"""
    s1=list(s)
    index_a=dict()
    j=-1
    for i in s1:
    	j+=1
        index_a[j]=i
    print(index_a)
    
    展开全文
  • /// <summary> /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// </summary>... /// MD5加密,和动网上的16/32位MD5加密结果相同, /// 使用的UTF8编码
    /// <summary>
        /// 不可逆加密
        /// 1 防止被篡改
        /// 2 防止明文存储
        /// 3 防止抵赖,数字签名
        /// </summary>
        public class MD5Encrypt
        {
            #region MD5
            /// <summary>
            /// MD5加密,和动网上的16/32位MD5加密结果相同,
            /// 使用的UTF8编码
            /// </summary>
            /// <param name="source">待加密字串</param>
            /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param>
            /// <returns>加密后的字串</returns>
            public static string Encrypt(string source, int length = 32)//默认参数
            {
                if (string.IsNullOrEmpty(source)) return string.Empty;
                HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;
                byte[] bytes = Encoding.UTF8.GetBytes(source);//这里需要区别编码的
                byte[] hashValue = provider.ComputeHash(bytes);
                StringBuilder sb = new StringBuilder();
                switch (length)
                {
                    case 16://16位密文是32位密文的924位字符
                        for (int i = 4; i < 12; i++)
                        {
                            sb.Append(hashValue[i].ToString("x2"));
                        }
                        break;
                    case 32:
                        for (int i = 0; i < 16; i++)
                        {
                            sb.Append(hashValue[i].ToString("x2"));
                        }
                        break;
                    default:
                        for (int i = 0; i < hashValue.Length; i++)
                        {
                            sb.Append(hashValue[i].ToString("x2"));
                        }
                        break;
                }
                return sb.ToString();
            }
            #endregion MD5
    
            #region MD5摘要
            /// <summary>
            /// 获取文件的MD5摘要
            /// </summary>
            /// <param name="fileName"></param>
            /// <returns></returns>
            public static string AbstractFile(string fileName)
            {
                using (FileStream file = new FileStream(fileName, FileMode.Open))
                {
                    return AbstractFile(file);
                }
            }
            /// <summary>
            /// 根据stream获取文件摘要
            /// </summary>
            /// <param name="stream"></param>
            /// <returns></returns>
            public static string AbstractFile(Stream stream)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] retVal = md5.ComputeHash(stream);
    
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < retVal.Length; i++)
                {
                    sb.Append(retVal[i].ToString("x2"));
                }
                return sb.ToString();
            }
            #endregion
        }
    
    
    展开全文
  • 简单操作只需10秒破解PDF加密文件

    万次阅读 多人点赞 2016-05-08 19:03:07
    简单操作只需10秒破解PDF加密文件 破解PDF加密文件,如何破解PDF密码呢,破解加密的PDF文件 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51187240 从网上下载的PDF文件,由于...
  • 这对于一些重要的文件,加密存储是非常必要的。不幸的是,常常还会有忘记rar密码的情况,这就需要rar密码破解的方法。本文将就rar的加密、解密逐一展开介绍。 一、rar加密的步骤如下: 第1步:打包时,在“压缩...
  • 文件加密软件

    万次阅读 2019-04-16 16:21:34
    在电商年代,互联网给大家的衣食住行、工作造成巨大便捷,随之各种各样电子设备的呈现,客户也开始运用文件加密软件来保障自己的数据。现阶段市场上的免费加密软件诸多,客户都是犹豫不决文件加密软件哪家好用这个...
  • 对称加密非对称加密不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。 1对称加密算法 原理 对称加密算法中,数据加密和解密采用的都是...
  • 常用js数据加密

    万次阅读 2019-11-21 11:20:27
    常用js数据加密 原生js已经支持base64加密及解密 //加密 window.btoa(this.shop) //解密 window.atob(this.shop)
  • AES加密过程详解

    万次阅读 多人点赞 2018-07-03 16:55:58
    AES加密过程涉及到4种操作,分别是字节替代、行移位、列混淆和轮密钥加。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。...
  • RSA加密与解密(Java实现)

    万次阅读 多人点赞 2018-10-17 10:22:52
    RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密。 Base64编码 apache.commons-codex包提供了许多编码格式转换,例如Base64。 以下为Base64编码表...
  • 1、定义8位的加密秘钥 /// <summary> /// 加密密钥(8位) /// </summary> public static string KEY_64 = "00000000"; 2、定义8位的初始化向量 /// <summary> //...
  • 如何使用加密狗加密自己程序

    万次阅读 2019-06-10 16:09:34
    使用加密狗进行程序的加密保护是非常成熟的加密方案。目前市面上比较常见的加密锁:深思的精锐5,威步,safenet。国内比较老牌的加密锁公司是深思,深思的锁从精锐4,到现在的精锐5,都是比较不错的产品,加密安全性...
  • Java.Utils:AES-128-CBC 加密方式

    万次阅读 2020-02-13 18:18:50
    package ... import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.BadPaddingException; import javax.crypto....
  • AES 加密算法的原理详解

    万次阅读 多人点赞 2018-07-23 22:18:49
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的....
  • 1、 软件破解与防止破解知识、加密与反编译 2、把部分代码写成dll的形式,增加破解难度 3、防止软件被恶意破解和修改,如果被修改将自动销毁。 4、 C#引用c++制作生成的dll来提高破解复杂度。 5、被破解泛滥,可...
  • Java加密技术(四)——非对称加密算法RSA 非对称加密算法——RSA 基本概念 非对称加密算法是一种密钥的保密方法。 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有...
  • des加密算法(js+java)加密与解密结果相同

    千次下载 热门讨论 2014-01-17 14:08:25
    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
  • 有些小区的门禁卡是加密的IC卡,用nfc手机和手环无法直接模拟门禁卡,网上提供的方案大多都需要买PM3或者PN532等专业设备。研究了下发现完全没必要搞这麻烦,本文提供了一个更便宜的曲线救国的办法,只需要买几张...
  • 凯撒密码 C语言 加密解密

    万次阅读 多人点赞 2017-03-18 10:16:04
    凯撒密码凯撒加密(Caesarcipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。 举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位: a会被替换为d;b会被替换成e;...
  • 课程内容包含乱码的原因分析、代码的压缩与优化、JavaScript/html前端代码加密解密、前端加密防360浏览器拦截、html代码解密原理分析、万能解密神器、手动解密html代码等等。
  • 这篇文章介绍Android平台上常用的加密方式之MD5加密。MD5 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程...
  • 最近用转包软件抓得百度手机助手评论包数据这样的请问他有没有使用加密啊? CxpzjcIjNTCvVXeRZVbtA3fx561pJVueCv3Dzd9Rmu333y9TMwf8ZfgIITQKx1Nvv%2BgPFZb8v92T%0ApO0r9YtNeiKxDGRghu4UeF%2FwQu%2FyE6Yd1Sp%2BB3x6...
  • 同态加密

    万次阅读 2019-05-15 09:19:42
    对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。 1.同态加密的相关概念 同态加密是一种无须对加密数据进行提前解密就可以执行...
  • python密码加密

    万次阅读 2018-11-06 11:24:01
    推荐2种:sha1和md5,不可逆,sha1生成后40位,相对安全,但速度慢,md5生成后32位,速度快.加密后特点:数字加小写英文字母,简单密码容易破解...生成md5 32位加密串 """ import hashlib str1 = 'hello world!' ret = hash...
  • ActivityParticipate.c35bceda.js在这个加载的JS里找到AES加密KEY是:eaa34f53daf201e309e15d079eec15d5 这个KEY可以解密post后返回的信息 但发送前的数据参数解不开。 下面是提交时的加密参数 其中o和u的参数是...
  • 对称加密与非对称加密

    千次阅读 2015-09-06 21:43:39
    什么是加密加密分为算法和秘钥两部分。算法是不变的,秘钥是变化的,看下面的例子。 秘钥:abcedfgh->12345678。 算法:明文中每一位都换成秘钥表中的另一个位。 例如adfh经过加密后为1568。 加密密钥K和解密...
  • MySQL双向加密和单项加密函数

    万次阅读 2018-03-30 16:29:37
    双向加密就让我们从最简单的MySQL加密开始:MySQL双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个...
  • Python编程:实现凯撒密码加密解密

    万次阅读 2018-10-12 16:54:44
    原理: 通过把字母移动一定的位数来实现加解密 明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。 例如: 当步长为3时,A被替换成D,B被替换成E,依此类推,X替换成A...对称加密: ...
  • AES加密解密&&SHA1、SHA加密&&MD5加密

    万次阅读 2015-12-17 09:35:15
    AES加密解密 SHA1、SHA加密 MD5加密 二话比说马上附上代码:

空空如也

1 2 3 4 5 ... 20
收藏数 244,523
精华内容 97,809
关键字:

加密