加密技术简介 1加解密简介 加密的目的就是,不能让发送方和接收方以外的其他第三方明白两者之间传送的数据的意 义。举个例子:上课,小明给小红传纸条,中间会途径小王,那么这个传送的过程中,不 能保证小王是否会偷看这个纸条的内容。但是小明想这个纸条只能是我和小红看不想给别人 看。于是他跟小红在课下定了一个文字规则,纸条上的哈哈 ,代表我 阿阿 代表你” 老孤狸”代表·老师 ”代表答案”等等。于是乎他俩传纸条 传出去的字都是经过这种规则去写出来的。小王即使打开了纸条,对于一个不懂文字规则的 人简直就是天书。更别提获取啥有价值的八卦信息了。但是小红收到了纸条之后,按照跟小 明定好的规则进行还原。就能看明白纸条到底写了啥。 其实这样一个场景,模拟的正是加密和解密的过程。互联网对数据的加解密,大致也就这样 的套路。只不过,双方之间加密的规则肯定是要比例子中要复杂的多。 任何一个加密系统至未少包括以下四个部分组成: 1未加密的报文,称为铭文 2加密后的报文,称为密文 3加密解密的设备或者算法 4加密解密的秘钥 发送方用加密秘钥,通过加密的设备或者算法,将信息加密后发送出去。接收方在接收到秘 闻之后,用解密的秘钥进行密文解密,将密文恢复为铭文。如果传输途中有人窃取,他只能 得到无法理解的密文,从而对信息起到保护作用。 2加密技术分类 加密技术的分类按照标准不同往往有不同的分类。这里只探讨以秘钥为标准划分的分类 对称式加密收发双方使用相同秘钥的密码,叫做对称式加密。传统的密码都是此类。 非对称式加密收发双方使用不同秘钥的密码.叫做非对称式加密。如现代密码中的公共秘 胡密和就是此类。 3常见的加密技术介绍 参考文章:浅谈加密技术 加密技术分为两个元素,算法和秘钥。算法是将普通的文本或者是可以理解的信息,与 串数字(秘钥相结合,产生不可理解的密文的步骤。秘钥是用来对数据进行编码和解码的 种参数。在安全保密中,可以通过适当的秘钥加密技术和管理机制来保证网络的信息通信安 全。秘钥加密的技术密码分为对称密钥和费对称密钥两种。相应的 对数据加密的技术也分 为两类。即对称加密(私人秘钥加密)和非对称加密(公开密钥加密)。 对称加密以数据加密标准DS(Data Encryption Standard)算法为代表。 非对称加密以RSA(Rivest shamir Adleman)算法为代表。 对称加密的加密秘钥和解密密钥相同,而非对称加密的加密秘钥和解密密钥不同并且其中 把钥匙(公钥)可以公开,而另一把钥匙(私钥)需要自己保密。 3.1对称密码(置换和代换) 如图:
加密技术简介 1 加解密简介 加密的目的就是,不能让发送方和接收方以外的其他第三方明白两者之间传送的 数据的意 义。举个例子:上课,小明给小红传纸条,中间会途径小王, 那么这个传送的过程中,不 能保证小王是否会偷看这个纸条的内容。但是小明想这个纸条只能是我和小红看不想给别人 看。于是他跟小红在课下定了一个文字规则, 纸条上的“哈哈”,代表“我”, “呵呵” 代表“你”,“老狐狸”代表“老师”, “**”代表“答案”等等。。于是乎他俩传纸条, 传出去的字都是经过这种规则去写出来的。小王即使打开了纸条,对于一个不懂文字规则的 人简直就是天书。更别提获取啥有价值的八卦信息了。但是小红收到了纸条之后,按照跟小 明定好的规则进行还原。就能看明白纸条到底写了啥。 其实这样一个场景,模拟的正是加密和解密的过程。互联网对数据的加解密,大致也就这样 的套路。只不过,双方之间加密的规则肯定是要比例子中要复杂的多。 任何一个加密系统至未少包括以下四个部分组成: 1 未加密的报文,称为铭文 2 加密后的报文, 称为密文 3 加密解密的设备或者算法 4 加密解密的秘钥 发送方用加密秘钥,通过加密的设备或者算法,将信息加密后发送出去。接收方在接收到秘 闻之后,用解密的秘钥进行密文解密,将密文恢复为铭文。如果传输途中有人窃取,他只能 得到无法理解的密文,从而对信息起到保护作用。 2 加密技术分类 加密技术的分类按照标准不同往往有不同的分类。这里只探讨以秘钥为标准划分的分类 对称式加密 收发双方使用相同秘钥的密码,叫做对称式加密。传统的密码都是此类。 非对称式加密 收发双方使用不同秘钥的密码,叫做非对称式加密。如现代密码中的公共秘 钥密码就是此类。 3 常见的加密技术介绍 参考文章: 浅谈加密技术 加密技术分为两个元素, 算法和秘钥。算法是将普通的文本或者是可以理解的信息,与一 串数字(秘钥)相结合,产生不可理解的密文的步骤。秘钥是用来对数据进行编码和解码的一 种参数。在安全保密中,可以通过适当的秘钥加密技术和管理机制来保证网络的信息通信安 全。秘钥加密的技术密码分为对称密钥和费对称密钥两种。相应的,对数据加密的技术也分 为两类。即对称加密(私人秘钥加密)和非对称加密(公开密钥加密)。 对称加密以数据加密标准 DES(Data Encryption Standard)算法为代表。 非对称加密以 RSA(Rivest Shamir Adleman)算法为代表。 对称加密的加密秘钥和解密密钥相同,而非对称加密的加密秘钥和解密密钥不同并且其中一 把钥匙(公钥)可以公开,而另一把钥匙(私钥)需要自己保密。 3.1 对称密码(置换和代换): 如图:
X:为明文,算法的输入 Y:通过密钥K,加密后的密文 K:为密钥 对称密码(单密密码或传统密码):发送方和接收方使用相同的密钥 步骤: 1,加密算法根据输入信息X和密钥K生成密文Y(具体的函数由密钥K的值决定) 其中要通信的双方持有相同的密钥通过安全通道传递 2,到达目的地后通过密钥K解密即可得到明文, 使用最广泛的加密体制是数据加密标准(DES-Data Encryption Standard)使用64位分组长度 和56为密钥长度.其他常见的对称加密算法:三重DES,高级加密标准(AES AdvancedEncryption Standard).Blowfish算法.RC5算法. 缺点 通信双方事先对密钥达成一致协议在现实中,未见过面的双方使用应用对称密钥密钥进行通 信.解决方案-使用双方都信任的密钥分发中心KDC(keyDistribution Center)) 3.2公钥密码(基于数学函数的算法) 如图 步骤 1接收方乙生成一对秘钥,即公钥和私钥。然后将公钥发布出来。例如给了甲丙丁这几个人 2甲。丙,丁,给接收方乙发送数据.都用公钥对这段数据进行加密 3乙收到消息后用自己的私钥对消息解密. 对于公钥加密通信实体必须先交换公共密钥.一个用于可以通过很多方式公布它的公共密钥 例如在个人网页上但是这种简单的方式可能会道到第三方的主动攻击,解决办法-认证中 CA(CertificationAuthority) 相关算法-RSA: 第一个既能用于数据加密也能用于数据签名的算法.以发明者的名字命名采用的分组密码。 其他的公钥加密 算法:EIGamal算法(数据加密数据签名).背包加密算法 3.3对称性加密与非对称加密的优缺点比较 3.3.1对称性加密优缺点:
X:为明文,算法的输入 Y: 通过密钥 K,加密后的密文 K:为密钥 对称密码(单密密码或传统密码):发送方和接收方使用相同的密钥 步骤: 1,加密算法根据输入信息 X 和密钥 K,生成密文 Y (具体的函数由密钥 K 的值决定) 其中要通信的双方持有相同的密钥,通过安全通道传递. 2,到达目的地后,通过密钥 K 解密即可得到明文. 使用最广泛的加密体制是数据加密标准(DES-Data Encryption Standard)使用 64 位分组长度 和 56 为密钥长度 . 其 他 常 见 的 对 称 加 密 算 法 : 三 重 DES, 高 级 加 密 标 准 (AESAdvancedEncryption Standard),Blowfish 算法,RC5 算法. 缺点: 通信双方事先对密钥达成一致协议在.现实中,未见过面的双方使用应用对称密钥密钥进行通 信.解决方案-使用双方都信任的密钥分发中心 KDC(keyDistribution Center). 3.2 公钥密码(基于数学函数的算法): 如图: 步骤: 1 接收方乙生成一对秘钥,即公钥和私钥。然后将公钥发布出来。例如给了甲丙丁这几个人 公钥 2 甲,丙,丁,给接收方乙发送数据,都用公钥对这段数据进行加密 3 乙收到消息后,用自己的私钥对消息解密. 对于公钥加密,通信实体必须先交换公共密钥.一个用于可以通过很多方式公布它的公共密钥, 例 如在个人网 页上,但是这种简单的方式可能会遭到第三方的主动攻击,解决办法-认证中 心 CA(CertificationAuthority) 相关算法–RSA: 第一个既能用于数据加密也能用于数据签名的算法.以发明者的名字命名,采用的分组密码。 其他的公钥加密 算法:ElGamal 算法(数据加密,数据签名),背包加密算法 3.3 对称性加密与非对称加密的优缺点比较 3.3.1 对称性加密优缺点:
优点:加密速度快保密度高 缺占·1黎钥是保密通信的关钟发信方认须安全,要盖的把黎组送到收信方不能计霞甘 内容,密钥的传输必须安全,如何才能把密钥安全送到收信方是对称加密体制的突出问题 2.n个合作者,就需要n个不同的密钥,如果n个人两两通信需要密钥数量(n-1).使得 钥的分发复杂。即,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥 匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担! 3,通信双方必须统一密钥,才能发送保密信息,如果双方不相识,这就无法向对方发送秘密 信息了 4难以解决电子商务系统中的数字签名认证问题。对开放的计算机网络,存在着安全隐患 不适合网络邮件加密需要。 332非对称加密体制的优缺点: 2公钥在传递和 ,其优势在于不需要共享通用的密钥 中即使被截获。 由于没有与公钥相匹配的私钥,截获的公钥对入侵 者没有太大意义。 3密钥少便于管理,N个用户通信只需要N对密钥,网络中每个用户只需要保存自己的解密 密钥 4.密钥分配简单,加密密钥分发给用户,而解密密钥由用户自己保留。 缺点:加密算法复杂,加密和解密的速度比较慢 3.3.3总结: 通过我们的了解对称加密的实现比较简单,但是安全性不是很高,一般用在对安全要求级别 不是很高的情况下,但是非对称加密比较复杂,但是安全性很高,在实际应用中需要我们综合 利弊考虑 4加密相关代码AP1简介 参若文竞:Cipher android提供了一个专门搞加密的APl。类名叫做Cipher,可以进行对称性加密解密和非对 称性加密 解密 所以以下重点看看Clipher代码 先看他是怎么使的,以解密为例: ★ *AES解密(128位密钥) *@param cipherText *@param key *@return @throws Exception public static byte decodeAES(byte cipherText, String key)throws Exception{ SecureRandom secureRandomSecureRandom.getinstance("SHA1PRNG". "Crypto"):
优点:加密速度快保密度高。 缺点: 1.密钥是保密通信的关键,发信方必须安全、妥善的把密钥送到收信方,不能泄露其 内容,密钥的传输必须安全,如何才能把密钥安全送到收信方是对称加密体制的突出问题。 2. n 个合作者,就需要 n 个不同的密钥,如果 n 个人两两通信需要密钥数量 n(n-1),使得密 钥的分发复杂。即,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥 匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。 3.通信双方必须统一密钥,才能发送保密信息,如果双方不相识,这就无法向对方发送秘密 信息了。 4.难以解决电子商务系统中的数字签名认证问题。对开放的计算机网络,存在着安全隐患, 不适合网络邮件加密需要。 3.3.2 非对称加密体制的优缺点: 优点: 1.公钥加密技术与对称加密技术相比,其优势在于不需要共享通用的密钥。 2.公钥在传递和发布过程中即使被截获,由于没有与公钥相匹配的私钥,截获的公钥对入侵 者没有太大意义。 3.密钥少便于管理,N 个用户通信只需要 N 对密钥,网络中每个用户只需要保存自己的解密 密钥。 4.密钥分配简单,加密密钥分发给用户,而解密密钥由用户自己保留。 缺点:加密算法复杂,加密和解密的速度比较慢 3.3.3 总结: 通过我们的了解,对称加密的实现比较简单,但是安全性不是很高,一般用在对安全要 求级别 不是很高的情况下,但是非对称加密比较复杂,但是安全性很高,在实际应用中需要我 们综合 利弊考虑. 4 加密相关代码 API 简介 参考文章:Cipher android 提供了一个专门搞加密的 API。 类名叫做 Cipher,可以进行对称性加密解密和非对 称性加密解密。所以以下重点看看 Clipher 代码: 先看他是怎么使的,以解密为例: /** * AES 解密(128 位密钥) * * @param cipherText * @param key * @return * @throws Exception */ public static byte[] decodeAES(byte[] cipherText, String key) throws Exception { SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "Crypto");
secureRandom.setSeed(key.getBytes()): KeyGenerator kgen=KeyGenerator.getinstance(ALGORITHM_AES) kgen.init(128,secureRandom): SecretKey secretKey=kgen.generateKey(): byte[enCodeFormat=secretKey.getEncoded(: 构建秘钥规范,实则是一个被用来做指定算法加密的秘钥。 SecretKevSpec skevSpec new SecretkevSpec(enCodeFormat ALGORITHM AES) Cipher我认为实则是一个加密器的包装类,就是用来做加密解密的。但是事先 我们需要 定义好究竞要以那种模式进行加密或者解密 获取实例,参数是设置加密参数.目前为AES加密 Cipher cpher Cipher getinstance(ALGORITHM AES) 设置为银密模式并抑秘钥传讲去 pherini/Cipher.DECRYPT_MODE.skeySpec) byte result=cipher.doFinal(cipherText): return result; 6 8 9 9 31 16 18190 22 245
secureRandom.setSeed(key.getBytes()); KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM_AES); kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); // 构建秘钥规范,实则是一个被用来做 指定算法加密的 秘钥。 SecretKeySpec skeySpec = new SecretKeySpec(enCodeFormat, ALGORITHM_AES); // Cipher 我认为实则是一个加密器的包装类 ,就是用来做加密解密的。但是事先 我们需要 // 定义好 究竟要以那种模式进行加密或者解密 // 获取实例,参数是设置加密参数,目前为 AES 加密 Cipher cipher = Cipher.getInstance(ALGORITHM_AES); // 设置为解密模式, 并把秘钥传进去 cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] result = cipher.doFinal(cipherText); return result; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
这里面我们重点看两个项目:1 SecretKeySpec,.2 Cipher。以及他们的用法。 41整体理解 目前我个人的理解是,SecretKeySpec描述的就是一把秘钥。而Cipher则更像是一个万能 的加密解密器。我们用的时候只需要给出正确的秘钥,然后给这个加密器说明此次需要的 秘钥。和要进行哪种方式的加密。然后再调用相应的代码即可。 并且加密的时候或者解密的时候会用到这把秘钥。 其代码比较简单: /At :cm采用的法 *key:秘钥数据 public SecretKeySped(byte key.String algorithm){ if (key =null) throw new lllegalArgumentException("key =null"): if (key.length==0)( throw newlllegalArgumentException("key.ength ==0) if(algorithm ==null){ throw new llegalArgumentException("algorithm ==null"): this.algorithm=algorithm: this.key =new byte[key.length]: System.arraycopy(key.0.this.key..key.length): publicSecretKeySped(byte key.int offset,int len,String algorithm)( if (key =null) throw new lllegalArgumentException("key =null"): if(key.length==0){ throw newlllegalArgumentException("key.length==0") if (len <0 ll offset 0){ throw new ArraylndexOutOfBoundsException("len<0ll offset <0"):
这里面我们重点看两个项目:1 SecretKeySpec, 2 Cipher。以及他们的用法。 4.1 整体理解 目前我个人的理解是,SecretKeySpec 描述的就是一把秘钥。 而 Cipher 则更像是一个万能 的加密解密器。 我们用的时候只需要给出正确的秘钥,然后给这个加密器说明此次需要的 秘钥,和要进行哪种方式的加密。然后再调用相应的代码即可。 4.2 SecreKeySpec 主要是用来构建秘钥规范。其代码是比较简单的。但是我认为它实则就是描述了一把秘钥! 并且加密的时候或者解密的时候会用到这把秘钥。 其代码比较简单: 总共就没几个方法,就三个属性。 看看构造方法: /** * key: 秘钥数据 * algorithm:采用的算法模式 * */ public SecretKeySpec(byte[] key, String algorithm) { if (key == null) { throw new IllegalArgumentException("key == null"); } if (key.length == 0) { throw new IllegalArgumentException("key.length == 0"); } if (algorithm == null) { throw new IllegalArgumentException("algorithm == null"); } this.algorithm = algorithm; this.key = new byte[key.length]; System.arraycopy(key, 0, this.key, 0, key.length); } public SecretKeySpec(byte[] key, int offset, int len, String algorithm) { if (key == null) { throw new IllegalArgumentException("key == null"); } if (key.length == 0) { throw new IllegalArgumentException("key.length == 0"); } if (len < 0 || offset < 0) { throw new ArrayIndexOutOfBoundsException("len < 0 || offset < 0"); }