数据加密学习总结_第1页
数据加密学习总结_第2页
数据加密学习总结_第3页
数据加密学习总结_第4页
数据加密学习总结_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

黑马程序员数据加密学习对称加密算法:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或者单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或者接收的消息解密,所以密钥的保密性对通信性至关重要。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。非对称加密算法:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)o公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,惟独用对应的私有密钥才干解密;如果用私有密钥对数据进行加密,那末惟独用对应的公开密钥才干解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中惟独一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了不少。加密模式:电子密码本(ElectronicCodeBook,ECB):在ECB模式中,每块明文都是独立于其他块加密的。虽然这样做比较高效(可以并行执行多个数据块的加密)但这种方法有一个很大的问题。例如,在ECB模式中,对相同明文块的加密总是产生相同的密文块,这为某些类型的密码分析攻击打开了方便之门。ECB方式通常被认为不适合保护敏感数据。密码块链接(CipherBlockChaining,CBC):在CBC模式中,文本块是连续加密的,在加密当前明文块之前,用前一次块加密的结果修改当前明文块。这个过程改进了加密的一些特征(例如,相同的明文块不会产生相同的密文块),但是由于其加密过程是连续的,CBC方式不支持加密的并行化。CBC方式使用一个称作初始化向量(InitializationVector,IV)的附加文本来开始链接过程。IV用于修改被加密的第一个明文块。密码反馈(CipherFeedback,CFB):在CFB模式中,先加密前一个块,然后将得到的结果与明文相结合产生当前块,从而有效地改变用于加密当前块的密钥。这里密钥的值是不断变化的,这个过程与流加密类似,但是性能则远不如流加密。与CBC方式一样,这里要使用一个初始化向量作为加密过程的种子。输出反馈(OutputFeedback,OFB):在OFB方式中,使用一个种子或者IV来开始加密过程。加密种子后,将加密结果与明文块结合产生密文。之后被加密的种子再度被加密,如此重复此过程,直到遍及全部明文。同样,结果类似于流加密密码文本窃用(CipherTextSteal):模式处理任何长度的纯文本并产生长度与纯文本长度匹配的密码文本。除了最后两个纯文本块外,对于所有其他块,此模式与CBC模式的行为相同。DES:数据加密标准(DES,DataEncryptionStandard)是一种使用密钥加密的块密码,它基于使用56位密钥的对称算法。DES现在已经不被视为一种安全的加密算法,主要因为它使用的56位密钥过短。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。///〈summary〉III使用DES加密字符串III</summary>///<paramname="sourc㊀”>要力口密的字符串</param>III<paramname="key”>力口密密匙</param>III〈returns〉加密后的字符串</returns>privatestaticstringEncryptByDES(stringsource,stringkey){byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[16]{200,200,200,200z200,200,200,200,200,200,200,200z200,200,200,200};if(input.Length>16)(Console.WriteLin”e只(能输入8个汉字或者16个字符!”);returnnull;)input.CopyTo(temp,);DESCryptoServiceProvidercryptoServicenewDESCryptoServiceProvider();//实例化DES力口密月艮务类cryptoService.Mode=CipherMod㊀.CB/C/;使用的加密模式cryptoService.IV=temp.Tak8㊀)(.ToArray();//定义偏移量cryptoService.Key=temp.Ski^)(,ToArray();//定义密钥ICryptoTransformencryptor=cryptoService.CreateEncryptor(/)/;用加密服务对象创建一个对流执行加密转换的加密器byte[]byteArr=Encoding.Default.GetBytes(source);//把源字符串放至ll字节数组中returnConvert.ToBase64String(encryptor.TransformFinalBlock(byteArr,0,byteArr.Length));//使用加密器加密数据)III<summary>III使用DES解密字符串III</summary>///<paramname="source”>要解密的字符串</param>Ill<paramname="key”>解密密匙</param>III<r㊀turns〉解密后的字符串〈/工㊀turns〉privatestaticstringDecryptByDES(stringsource,stringkey)(byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[16]{200,200,200,200,200z200,200,200,200,200,200z200,200,200,200,200};if(input.Length>16)(Console.WriteLin”㊀错(误的密匙”);returnnull;)input,CopyTo(temp;);DESCryptoServiceProvidercryptoServicenewDESCryptoServiceProvider();cryptoService.Mode=CipherMode.CBC;cryptoService.IV=temp.Tak8)(.ToArray();cryptoService.Key=temp.SkiB)(.ToArray();byte[]byteArr=Convert.FromBase64String(source);//把源字符串放至Ll字节数组中ICryptoTransformdecryptor=cryptoService.CreateDecryptor(/)/;使用加密服务对象创建一个对流执行解密转换的解密器returnEncoding.Default.GetString(decryptor.TransformFinalBlock(byteArr,0,byteArr.Length));//使用解密器解密数据,密匙错误会抛异常)SI3DES:(或者称为TripleDES)是三重数据加密算法(TDEA,TripleDataEncryptionAlgorithm)块密码的通称。它相当于是对每一个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。圈〃/〈summary〉III使用DES加密字符串III</summary>III<param11己1110="50皿00,,>要加密的字符串<勺—己]11>III<paramname="key”〉力口密密匙</param〉///〈returns〉力PI密后的字符串〈/returns〉publicstaticstringEncryptBy3DES(stringsource,stringkey)(RegexregnewRegex(@n[\w\W]{0,8}");Matchcollectionmatchs=reg.Matches(key);stringresult=source;foreach(Matchmatchinmatchs)(result=EncryptByDES(result,match.ToString());)returnresult;}///<summary>III使用DES解密字符串///</summary>///〈paramnam㊀="sourc㊀”〉要解密的字符串</param>///<paramnam㊀="k㊀y”>解密密匙</param>III〈returns〉解密后的字符串</1;巳5]:口5>publicstaticstringDecryptBy3DES(stringsource,stringkey)(RegexregnewRegex(@n[\w\W]{0z8}n);Matchcollectionmatchs=reg.Matches(key);stringresult=source;for(inti=matchs.Count-1;i>=0;i-一)(result=DecryptByDES(result,matchs[i].ToString());)returnresult;)散列:Hash,普通翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来惟一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。散列函数的性质:所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果。但另一方面,散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能是相同的,但并不能绝对肯定二者一定相等。输入一些数据计算出散列值,然后部份改变输入值,一个具有强混淆特性的散列函数会产生一个彻底不同的散列值。典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。一一对应的散列函数也称为罗列。可逆性可以通过使用一系列的对于输入值的可逆“混合”运算而得到SHA-1及其他:SHA1对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且摹仿了该算法。散列是一种单向算法,一旦数据被转换,将无法再获得其原始值,只能对加密后的数据进行比较。MD5:MD5是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。ml///〈summary〉III使用SHA1加密III〈/summary〉///<param 要力□密的字符串</^a£合111〉///〈returns〉加密后的字符串〈/returns〉publicstaticstringEncryptBySHAl(stringsource)(SHA1shalnewSHAlCryptoServiceProvider();byte[]byteArr=shal.ComputeHash(Encoding.Default.GetBytes(source));shal,Clear();returnConvert.ToBase64String(byteArr);)III<summary>III使用SHA256加密III</summary>III<paramname="source”>要力口密的字符串〈/param>III〈returns〉力口密后的字符串〈/returns〉publicstaticstringEncryptBySHA256(stringsource)(SHA256sha256RewSHA256CryptoServiceProvider();byte[]byteArr=sha256.ComputeHash(Encoding.Default.GetBytes(source));sha256.Clear();returnConvert.ToBase64String(byteArr);)///<summary>III使用SHA384加密III〈/summary〉///<paramname="source”>要力U密的字符串</param>///〈returns>力口密后的字符串〈/returns〉publicstaticstringEncryptBySHA384(stringsource)(SHA384sha384newSHA384CryptoServiceProvider();byte[]byteArr=sha384.ComputeHash(Encoding.Default.GetBytes(source));sha384.Clear();returnConvert.ToBase64String(byteArr);}III<summary>〃/使用SHA512加密III</summary>III<paramname="sourc㊀”〉要力口密的字符串</param〉///〈returns)加密后的字符串(/returns〉publicstaticstringEncryptBySHA512(stringsource){SHA512sha512newSHA512CryptoServiceProvider();byte[]byteArr=sha512.ComputeHash(Encoding.Default.GetBytes(source));sha512,Clear();returnConvert.ToBase64String(byteArr);)///<summary>///使用MD5加密III</summary>///<param 要力口密的字符串</param>///<r㊀turns〉加密后的字符串〈/returns〉publicstaticstringEncryptByMD5(stringsource)(MD5md5newMD5CryptoServiceProvider();byte[]byteArr=md5.ComputeHash(Encoding.Default.GetBytes(source));md5.Clear();returnConvert.ToBase64String(byteArr);)AES:密码学中的高级加密标准(AdvancedEncryptionStandard.AES)是一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。高级加密标准已然成为对称密钥加密中最流行的算法之一。它可以使用128、192和256位密钥。(16字节、24字节、32字节)///〈summary〉III使用AES加密字符串///〈/summary〉///〈paramnam^="source”>要力口密的字符串</param>///<paramname="key”〉力U密密匙</param>III<r㊀turns〉力口密后的字符串〈/returns〉privatestaticstringEncryptAES(stringsource,stringkey)(byte[]input=Encoding.Default.GetBytes(key);byte[]temp=newbyte[32]{200,200,200z200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200z200,200z200};input.CopyTo(temp.);RijndaelManagedaesnewRijndaelManaged();aes.Mode=CipherMode.CBC;aes.Key=temp.Takd*£).ToArray();aes.IV=temp.Skip再).ToArray();ICryptoTransformcTransform=aes.CreateEncryptor();byte[]byteArr=Encoding.Default.GetBytes(source);returnConvert.ToBase64String(cTransform.TransformFinalBlock(byteArr,0,byteArr.Length));}III〈summary〉///使用AES解密字符串///</summary>III<paramnam㊀="source”〉要解密的字符串</param〉///<paramname="key”>解密密匙<々己二己!11>III<r㊀turns〉解密后的字符串〈/returns〉privatestaticstringDecryptAES(stringsource,stringkey)byte[]input=Encoding.Default.GetBytes(key);200,200,byte[]temp=newbyte200,200,200,200,200,200,200,200,200,200z200,200,200,200,200,200,200,200,200,200,200,200z200,200,200};input.CopyTo(temp>);RijndaelManagedaesnewRijndaelManaged();aes.Mode=CipherMode.CBC;aes.Key=temp.Tak(bf-).ToArray();aes.IV=temp.Ski由f).ToArray();ICryptoTransformcTransform=aes.CreateDecryptor();byte[]byteArr=Convert.FromBase64String(source);returnEncoding.Default.GetString(cTransform.TransformFinalBlock(byteArr,0,byteArr.Length));}同RSA:RSA加密算法是一种非对称加密算法,惟独短的RSA钥匙才可能被强力方式破解。还没有任何可靠的攻击RSA算法的方式,只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被破解的。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度向来是RSA的缺陷。///〈summary〉///使用RSA加密字符串III</summary>III<paramname="source”>要力口密的字符串〈/param>///<paramn—”publicK㊀y”>生成的公匙</param>III<paramname=nprivat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论