代码实现文件加密方法(代码加密是什么意思)
程序世界里的一切都是围绕信息做的处理,信息的传输安全尤为重要.jwt作为一个可用作分布式的web Token解决方案,就是基于信息的加密解密做的,所以要从根本上理解jwt,那加密解密是绕不开的一个话题.
在密码学中, 加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。理想情况下,只有经授权的人员能够读取密文所要传达的信息。加密本身并不能防止信息传输被截取,但加密能防止截取者理解其内容。因为种种技术原因,加密方法通常使用一个通过算法生成的伪随机密钥。虽然任何加密后的消息都可能被破解,但对于一个良好的加密算法而言,破解需要相当多的技术和算力。授权读取信息的人可以轻松通过发信人所提供的密钥解密信息,但未经授权的人员则不行。密码学历史中有众多加密方法;早期的加密方法常用于军事通讯。从此开始,现代计算中也出现了众多加密技术,并且加密在现代计算中也变得越来越常见。[1]现代的加密方式通常使用公钥或对称密钥。现代加密技术依赖现代计算机在破解密钥上并不高效的事实来保证其安全性。
--维基百科
--维基百科
从维基百科的描述可知加密实际上是通过一系列计算将人类可以理解的文字转换成人类无法直接理解的内容,解密就是将加密后的内容再还原回去的过程,理论上来说不存在无法破解的密文.
2.分类:
对称密钥加密
在对称密钥加密方案中,加密和解密密钥是相同的。通信方必须具有相同的密钥才能实现安全通信。对称密钥的一个典型例子:德国军方的恩尼格玛密码机。这种密码机每天都有密钥设置。当盟军弄清楚机器如何工作时,他们能够在发现给定日期传输的加密密钥后立即解密消息中编码的信息。
公钥加密[俗称 :非对称加密]
在公钥加密(即公开密钥加密)方案中,发布加密密钥供任何人使用和加密消息。但是,只有接收方才能访问能够读取消息的解密密钥。公钥加密最早是在1973年的一份秘密文件中描述的[3]; 之前所有加密方案都是对称密钥加密(也称为私钥)。
3.在.net中的实现
所有加密相关的都在 System.Security.Cryptography类库下,本文所有代码都需要引用System.Security.Cryptography
1.对称密钥加密
缺点加密解密双方的密钥是相同的,密钥传输是一个非常大的问题,唯一的密钥泄漏后,就不再安全,相对来说Aes加密计算更加复杂一些,被穷举的可能性更低,本文在对称密钥加密中只介绍DES和Aes两种
DES.Create方法创建的DES对象会有一个默认的Key,在自己的项目中使用的时候,这个公钥信息要保存好,确保加解密都使用相同的密钥进行即可. 所有加密类都是基于byte[]做的,所以在做此类封装的时候,如果是针对字符串做加密,一定要统一字符编码,加密用Utf8,解密也用Utf8.
DES实现加解密,密钥要求是 byte[8]如下:
AES是由DES发展而来它比DES多了一个叫IV向量的东西,密钥从原先的8位提升到了 32位,IV向量必须是 16位的.具体原理可以去翻文档,同样的Aes.Create也会默认有一个IV和Key.
对称密钥加密在编码中容易出错的地方就在密钥的设置的时候,也许密钥长度还有其他可能或者组合,不去深究了.
2. 公钥加密(非对称加密)
展开全文
相对于对称密钥加密,公钥加密是一种全新的密码方案,该方案中表示密钥的有两个一个私钥一个公钥,通过公钥加密,只能通过私钥进行解密,相比对称密钥加密,公钥加密不需要考虑密钥传输的问题,所以也就不存在密钥泄漏的问题,在微软文档中有明确提示,不应在任何情况下以明文形式保存私钥,建议的方案是将私钥保存到本机的私钥管理器中,不过为了写出下边的代码,我决定不接受他的建议
RSA.Create 同样会生成默认的公钥和私钥,想让别人使用自己颁发的公钥,用这个生成就行了,
stringtest = "你好开发者"; byte[] encryptedSymmetricKey = rsa.Encrypt(Encoding.UTF8.GetBytes(test), RSAEncryptionPadding.Pkcs1); Console.WriteLine( $"加密后的数据: {Convert.ToBase64String(encryptedSymmetricKey)}" );
/*解密*/varrasDes = RSA.Create; //导入私钥解密rasDes.ImportRSAPrivateKey(Convert.FromBase64String(prikey), outintbytesRead2); vardes = rasDes.Decrypt(encryptedSymmetricKey, RSAEncryptionPadding.Pkcs1); Console.WriteLine( $"解密后的数据: {Encoding.UTF8.GetString(des)}" );
可以看到确实如描述一般,公钥加密后就能通过私钥解密了.
3. Hash摘要算法
hash摘要算法不能算到加密解密中,因为基于它的计算是不可逆的,在一定数据范围[]内不重复,但不保证不一样的两个明文不会被计算为一个结果.所以在加密解密家族群里,它是妥妥的灭绝师太,渣男,只管加密不管解.,一个比较重要的特点就是 通过摘要算法计算可以将不同长度的数据计算为一个固定位长度的byte数组.一般用于保存密码,等永远没有查看需求的地方.就算拿到加密串你也拿它没辙.最常见的就是MD5,其实还有好多,好在.net已经将这些常用的都做了封装.代码如下: