精华内容
下载资源
问答
  • 加密与解密原理

    千次阅读 2021-02-28 22:07:56
    加密与解密原理 加密技术的作用 机密性: 通过数据加密实现。提供只允许特定用户访问和阅读信息,任何非授权用户对信息都不可理解的服务。这是使用加密的普遍原因。通过小心使用数学方程式,可以保证只有对应接收人...

    加密与解密原理

    加密技术的作用

    机密性:

    通过数据加密实现。提供只允许特定用户访问和阅读信息,任何非授权用户对信息都不可理解的服务。这是使用加密的普遍原因。通过小心使用数学方程式,可以保证只有对应接收人才能查看它。

    完整性:

    通过数据加密、散列或数字签名来实现,提供确保数据在存储和传输过程中不被未授权修改(篡改、删除、插入和重放等)的服务。对安全级别需求较高的用户来说,仅仅数据加密是不够的,数据仍能够被非法破解并修改。

    鉴别性:

    通过数据加密,数据散列或数字签名来实现,提供与数据和身份识别有关的服务,即认证数据发送和接收者的身份。

    抗抵赖性:

    通过对称加密或非对称加密,以及数字签名等,并借助可信的注册机构或证书机构的辅助来实现,提供阻止用户否认先前的言论或行为的抗抵赖服务。

    对称加密

    在这里插入图片描述

    对称加密算法也叫传统密码算法(秘密密钥算法、单钥算法),加密密钥能从解密密钥中推算出来。发件人和收件人共同拥有同一个密钥,既用于加密也用于解密。对称密钥加密是加密大量数据的一种行之有效的方法。对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的:以可以还原的方式将明文(未加密的数据)转换为暗文。由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥。

    注:希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥。

    对称加密算法的缺点:

    (1)由于加解密双方都要使用相同的密钥,因此在发送、接收数据之前,必须完成密钥的协商分发,在公开的网络上如何安全传送密钥成为了一个严峻的问题。

    (2)N个用户之间采用对称加密算法进行通信,需要的密钥对数量为N取2的组合,比如100个人通信时需要4950对密钥,如何对如此大数量的密钥进行管理成为另一个严峻的问题

    常见的对称加密算法

    流加密算法(stream algorithm)

    流加密算法在算法过程中连续输入元素,一次产生一个输出元素。典型的流加密算法算法一次加密一个字节的明文,密钥输入到一个伪随机字节生成器,产生一个表面随机的字节流,称为密钥流。流加密算法一般用在数据通信信道,浏览器或网络链路上。

    RC4

    分组加密算法(block algorithm)

    分组加密算法的输入为明文分组及密钥,明文被分为两半,这两半数据通过n轮处
    理后组合成密文分组,每轮的输入为上轮的输出;同时子密钥也是由密钥产生。
    典型分组长度是64位。

    数据加密标准(DES, Data Encryption Standard)

    三重数据加密标准(3DES ,
    Triple DES)

    高级加密标准(AES, Advanced Encryption Standard)

    IDEA (International Data Encryption Algorithm)

    非对称加密

    加密解密使用的是不同的密钥(公钥私钥),两个密钥之间存在相互依存关系

    用其中任一个密钥加密的信息只能用另一个密钥进行解密:即用公钥加密,用私钥解密就可以得到明文

    其中公钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者。

    收信者收到加密文件后,它可以使用他的私钥解密(反之亦然),这个密钥是由他自己私人掌管的,不需要分发,这就解决了密钥分发的问题

    非对称加密过程:
    在这里插入图片描述

    注:给谁发消息就需要使用谁的公钥进行数据加密

    非对称加密算法

    • DH( Diffie-Hellman)
    • RSA(Ron Rivest、AdiShamirth、LenAdleman)
    • DSA (Digital Signature Algorithm)

    散列算法:把任意长度的输入变换成固定长度的输出。

    MD5(Message Digest Algorithm 5)

    SHA(Secure Hash Algorithm)

    SM3(Senior Middle 3)

    对称与非对称加密比较

    优点缺点
    对称加密加解密速度快密钥分发问题
    非对称加密密钥安全性高加解密对速度敏感

    PKI(Public Key Infrastructure,公钥基础设施)

    通过使用公钥技术和数字证书来提供信息安全服务,并负责验证数字证书持有者身份的一种体系。

    数字证书

    数字证书:一个经证书授权中心即CA数字签名的文件,包含拥有者的公钥及相关身份信息

    证书类型

    自签名证书

    又称为根证书,是自己颁发给自己的证书,即证书中的颁发者和主体名相同。申请者无法向CA申请本地证书时,可以通过设备生成自签名证书,可以实现简单证书颁发功能。设备不支持对其生成的自签名证书进行生命周期管理(如证书更新、证书撤销等)。

    CA证书

    CA自身的证书。如果PKI系统中没有多层级CA,CA证书就是自签名证书;如果有多层级CA,则会形成一个CA层次结构,最上层的CA是根CA,它拥有一个CA"自签名”的证书。申请者通过验证CA的数字签名从而信任CA,任何申请者都可以得到CA的证书(含公钥),用以验证它所颁发的本地证书。

    本地证书

    CA办法给申请者的证书

    设备本地证书

    设备根据CA证书给自己颁发的证书,证书中的颁发者名称是CA服务器的名称。申请者无法向CA申请本地证书时,可以通过设备生成设备本地证书,可以实现简单证书颁发功能。

    PKI两种角色

    • 终端实体EE (End Entity) :也称为PKI实体,它是PKI产 品或服务的最终使用者,可以是个人、组织、设备(如路由器、防火墙)或计算机中运行的进程。
    • 证书认证机构CA (Certificate Authority) : CA是PKI的信任基础,是一个用于颁发并管理数字证书的可信实体。它是一种权威性、可信任性和公正性的第三方机构,通常由服务器充当,例如Windows Server 2008。

    PKI组成

    • 证书颁发机构(CA)
    • 证书注册机构(RA)
    • 证书库
    • 密钥备份及恢复系统
    • 证:书废除处理系统
    • 应用系统接口
    • 数字证书

    证书颁发机构(CA,Certificate Authority)

    在这里插入图片描述

    CA是PKI的核心执行机构,是PKI的 主要组
    成部分,一般简称为CA,在业界通常把它称为认证中心。它是一种权威性、可信任性和公正性的第三方机构。

    作用:

    • 签发证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书,以及对证书和密钥进行管理。
    • CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公钥。
    • CA中心的数字签名使得攻击者不能伪造和篡改证书。

    证书注册机构(RA, Registration Authority)

    RA ( Registration Authority) 是CA认证中心的组成部分,是数字证书的申请注册、审批、校对和管理机构。证书申请注册机构RA也称为层次结构,RA为注册总中心,负责证书申请注册汇总; LRA为远程本地受理点,负责用户证书申请和审查,只有那些经过身份信用审查合格的用户,才可以接受证书的申请,批准向其签发证书,这是保障证书使用的安全基础。

    证书库

    证书集中存放地,用户可以从此获得其他用户的证书。

    密钥备份及恢复系统

    • 如果用户的解密私钥丢失,则密文无法解密造成数据丢失,密钥的备份与恢复应由可信机构来完成,密钥的备份与恢复只能针对解密私钥(用户证书私钥),签名私钥(根证书私钥)不能备份。
    • 根据用户需求,CA中心可对用户的加密私钥进行备份,并确保密钥安全,CA中心的签名私钥可由上级CA中心来备份,所有密钥的备份都采用密钥分享技术,并将备份信息分段保存在不同的地方,所有密钥的恢复必须满足一定的条件(人数、信息分段的位置、特定的算法)才能完成。

    证书废除处理系统

    证书在有效期之内由于某些原因可能需要废除,废除证书-一般是将证书列入证书吊销.列表(CRL, Certificate Revocation List)来完成。

    应用系统接口

    PKI的价值在于使用户能够方便地使用加密、数字签名等安全服务,一个完整的PKI必须提供良好的应用接口,使得各种应用能够以安全、一致、可信的方式与PKI交互,确保所建立起来的网络环境的可信性。

    数字证书

    数字证书简称证书,是PKI的核心元素,数字证书是一段包含用户身份信息、用户公钥信息以及身份验证机构数字签名的数据,数字证书是一个经证书认证中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件,由CA证书颁发机构签发,它是数字签名的技术基础保障;现行的证书通常符合X.509v3标准(国内必须要使用X.509格式证书),证书是公钥的载体,证书上的公钥唯一与实体身份相绑定。现行的PKI机制一般为双证书机制,即一个实体应具有两个证书,两个密钥对,一个是加密证书,一个是签名证书,加密证书原则上是不能用于签名的。

    PKI工作过程

    在这里插入图片描述

    1.PKI实体向CA请求CA证书

    2.CA收到PKI实体的CA证书请求时,将自己的CA证书回复给PKI实体。

    3.PKI实体收到CA证书后,安装CA证书。

    当PKI当PKI实体通过SCEP协议申请本地证书时,PKI实体会用配置的HASH算法对CA证书进行运算得到数字指纹,与提前配置的CA服务器的数字指纹进行比较,如果一致,则PKI实体接受CA证书,否则PKI实体丢弃CA证书。

    4.PKI实体向CA发送证书注册请求消息(包括配置的密钥对中的公钥和PKI实体信息)。

    • 当PKI实体通过SCEP协议申请本地证书时,PKI实体对证书注册请求消息使用CA证书的公钥进行加密和自己的私钥进行数字签名。如果CA要求验证挑战密码,则证书注册请求消息必须携带挑战密码(与CA的挑战密码一致)。
    • 当PKI实体通过CMPv2协议申请本地证书时,PKI实体可以使用额外证书(其他CA颁发的本地证书)或者消息认证码方式进行身份认证。
      • 额外证书方式: PKI实体对证书注册请求消息使用CA证书的公钥进行加密和PKI实体的额外证书相对应的私钥进行数字签名。
      • 消息认证码方式: PKI实体对证书注册请求消息使用CA证书的公钥进行加密,而且证书注册请求消息必须包含消息认证码的参考值和秘密值(与CA的消息认证码的参考值和秘密值一致)。

    5.PKI实体收到CA发送的证书信息。

    • 当PKI实体通过SCEP协议申请本地证书时,PKI实体使用自己的私钥解密,并使用CA的公钥解密数字签名并验证数字指纹。数字指纹一致时, PKI实体接受证书信息,然后安装本地证书。

    • 当PKI实体通过CMPv2协议申请本地证书时:

      额外证书方式: PKI实体使用额外证书相对应的私钥解密,并使用CA的公钥解密数字签名并验证数字指纹。数字指纹一致时, PKI实体接受证书信息,然后安装本地证书。

      消息认证码方式: PKI实体使用自己的私钥解密,并验证消息认证码的参考值和秘密值。参考值和秘密值一致时, PKI实体接受证书信息,然后安装本地证书。

    6.PKI实体间互相通信时,需各自获取并安装对端实体的本地证书。PKI实体可以通过HTTP/LDAP等方式下载对端的本地证书。在一些特殊的场景中,例如IPSec, PKI实体会把各自的本地证书发送给对端。

    7.PKI实体安装对端实体的本地证书后,通过CRL或OCSP方式验证对端实体的本地证书的有效性。

    8.对端实体的本地证书有效时,PKI实体间才可以使用对端证书的公钥进行加密通信。

    9.如果PKI认证中心有RA,则PKI实体也会下载RA证书。由RA审核PKI实体的本地证书申请,审核通过后将申请信息发送给CA来颁发本地证书。

    数据安全传输案例

    在这里插入图片描述
    1.原始信息通过Hash形成信息摘要

    2.使用Alice的私钥进行数字签名

    3.将原始信息、数字签名、Alice的证书(包含Alice公钥)使用Bob与Alice之间的对称密钥进行加密传送数据。

    4.用Bob放入公钥加密对称密钥,将其放在密钥信封中传输。

    5.在公网上传输加密信息和密钥信封

    6.Bob接收到密钥信封后,使用Bob的私钥解密出对称密钥。

    7.使用对称密钥对加密信息进行解密

    8.解密出的数字签名,使用Alice证书中的Alice公钥验证签名,将信息摘要解出。

    9.将原始信息使用相同的Hash算法算出信息摘要,然后与8中的信息摘要进行对比,相同则接受成功。

    展开全文
  • Java实现文件的加密与解密

    千次阅读 2019-03-18 15:02:41
    最近在做一个项目,需要将资源文件(包括图片、动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息。此策略的原因好处是将准备好...

    最近在做一个项目,需要将资源文件(包括图片、动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息。此策略的原因与好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,减少了应用程序本身的大小。这一点对于移动应用尤其重要,特别是在资源量较大且需要对其进行保护的时候。毕竟在目前所处的大环境下,要想复制一款软件不难,那真正宝贵的就是不容易找到的资源了。

    先对文件与加密的相关知识做一个极为简单的科普(知道的可以跳过)。

    文件与字串

    • A、文件的操作流程一般为:打开–>读取–>对内容进行变换–>写入–>关闭。

    • B、常规性文件操作会用到的类有五个:File,InputStream,OutputStream,FileInoutStream,FileOutputStream,均包含在java.io下面。注意,在使用前必须对类文件进行导入,方法为import java.io.File(实现时需要分号结尾)。

    • C、创建InputStream类和OutputStream类的对象时,new关键字后边的类分别是FileInputStream和FileOutputStream(而不是其自身),如InputStream fin = new FileInputStream(File objectFile)。可以看出构造参数是File类型对象,其创建方式为File file = new File(String fileName)。

    • D、当String类对象作为函数参数时,可以直接传入常量字符串,如“D:\source.jpg”。String类对象构造方法中比较简单也是最常用的一种是String string = “string content”,当然,最终执行的是String string = new String(“string content”)。其实String是非常重要的类(可以说无处不在),提供了一套完善、高效操作字串的方法,使得开发者受益匪浅。

    • E、常规性文件操作涉及到的方法有五个:exist(),read(),write(),flush(),close()。exist()判断文件是否存在,调用者为File类对象;read()读取输入流中的内容,调用者为InputStream类对象;write()、flush()、close()的作用分别为向输出流中写内容、强制发送缓冲区中数据、保存并关闭文件,调用者为OutputStream类对象,不过InputStream类对象在操作完成后也需要close()。

    加密算法

    • MD5:以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

    • SHA:接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

    • DES:把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,主要分为两步:
          (1)初始置换,把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位…依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。
          (2)逆置换,经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。

    • 3-DES:使用3条56位的密钥对数据进行三次加密,是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准)。

    • AES:使用128、192、和256位密钥,并且用128位分组加密和解密数据。

    • 异或:与其说这是一种加密算法,倒不如称其为文件信息的简单变换,将每一个数据与某给定数据进行异或操作即可完成加密或解密,如dataEncrypt = dataSource^dataSecret。

    OK,是时候回到文件加密与解密的具体实现这个主题上来了。后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了。首先来看对一幅JPG类型图片进行异或加密的Java实现,由于是第一次给出代码,所以贴上了Java文件“FileEncAndDec.java”的所有内容。

    	private static void EncFile(File srcFile, File encFile) throws Exception {
    		if (!srcFile.exists()) {
    			System.out.println("source file not exixt");
    			return;
    		}
    
    		if (!encFile.exists()) {
    			System.out.println("encrypt file created");
    			encFile.createNewFile();
    		}
    		InputStream fis = new FileInputStream(srcFile);
    		OutputStream fos = new FileOutputStream(encFile);
    
    		while ((dataOfFile = fis.read()) > -1) {
    			fos.write(dataOfFile ^ numOfEncAndDec);
    		}
    
    		fis.close();
    		fos.flush();
    		fos.close();
    	}
    

    从代码可以看出,给定的加密秘钥(异或数据,可以在合法范围内随便定义)为十六进制数0x99。图片资源为以中文命名的“桌面.jpg”,加密文件为“encFile.png”,还有值为“decFile.bmp”的String类对象作为解密文件名称。

    相对应地,解密的实现几乎和加密相同,只是输入与输出文件不同,看下面代码。

    	private static void DecFile(File encFile, File decFile) throws Exception {
    		if (!encFile.exists()) {
    			System.out.println("encrypt file not exixt");
    			return;
    		}
    
    		if (!decFile.exists()) {
    			System.out.println("decrypt file created");
    			decFile.createNewFile();
    		}
    
    		InputStream fis = new FileInputStream(encFile);
    		OutputStream fos = new FileOutputStream(decFile);
    
    		while ((dataOfFile = fis.read()) > -1) {
    			fos.write(dataOfFile ^ numOfEncAndDec);
    		}
    
    		fis.close();
    		fos.flush();
    		fos.close();
    	}
    

    由于加密后的图片文件(保存为PNG类型)是不能直接在图片查看器中打开的,因为其内容已经改变,所以其缩略图标会显示为两朵不同颜色的花。对于其他类型的加密或损坏文件的缩略图标:JPG为山水画,BMP和TIF为画刷涂鸦,GIF为三个不同颜色的几何图形。当然,这些默认的图标应该会因系统而异。

    下面给出初始、加密及解密后的图标截图:
    截图
      和预想的一致,经测试发现以上方法对GIF动画(不是GIF图片,而是可以播放的动画资源)的加密与解密同样适用,代码和截图也就没有区别了,不过还是贴上来:

    File srcFile = new File("srcFile.gif"); //初始文件
    File encFile = new File("encFile.gif"); //加密文件
    File decFile = new File("decFile.gif"); //解密文件
    

    截图

    有两点需要注意:

    • 1、在调用加密与解密方法时,必须加上异常处理块(try{…}catch{…},否则编译不通过)。

    • 2、对用来加密或解密的源文件进行打开(读取)操作之前,最好判断其是否存在,免得造成意想不到的错误和时间的浪费。因为若文件不存在,后续的操作都是没有意义的。

    今天就先写到这,总结一下吧。文件加密简单地说就是对数据进行变换,虽然一千种方法可能会有一千种一种结果,但是思想是通用的。关键是加密所采用的算法的难易,有时间会对文中提到的算法用Java进行实现。

    原文:https://www.cnblogs.com/tgyf/p/4676878.html

    展开全文
  • 加密与解密

    千次阅读 2017-01-04 14:36:23
    加密与解密是通信中最常用的数据转换手段,先了解加密与解密的基本过程;加密:应用加密算法密钥对明文(尚未加密的原文)实施加密,转换成密文发送;解密:接收到密文后,应用相应算法同一密钥对密文解密,转换...

    加密与解密是通信中最常用的数据转换手段,先了解加密与解密的基本过程;

    加密:应用加密算法与密钥对明文(尚未加密的原文)实施加密,转换成密文发送

    解密:接收到密文后,应用相应算法与同一密钥对密文解密,转换为明文

    加密与解密的双方根据事先的基本约定(包括加密算法)与所给密钥进行加密或解密,而第三方不知约定,即使知晓密文与密钥,也很难进行解密了解通信的内容;

    试设计简单的加密与解密程序,并进行运行演示;

    1.加密与解密双方事先的约定:

    (1)、密钥转换为操作码;

    把密钥r(约定为3~4为整数)的各位数字相加,所得的和除以4的余数再加1,得到加密操作码m;

    (2)、文本字符分为三类分别加密转换;

    1)、非小写英文字母加密;

    明文中的所有非小写英文字母(约定为ASII码小于97的字符)加密转换为其ASII码减去(10+m)所对应的ASII字符;

    2)、ASII码为偶数的小写英文字母;

    若小写英文字母的ASII码为偶数,把该字母转换为其对称的英文字母(例如a与z对称,b与y对称等)后,再加上加密操作码m所对应的ASII字符;

    3)、ASII码为奇数的小写英文字母;

    若小写英文字母的ASII码为奇数,把该字母转换为其对称的英文字母后,再减去加密操作码m所对应的ASII字符;

    2.设计要求:

    设置数组char s[120]存储明文,int b[120]存储密文,int c[120]存储解密文;

    (1)、密钥r的处理;

    通过循环求余得r的各位数字和m,经m=m%4+1迭代得唯一的加密操作码m;

    输入密钥r比较大(约定3~4位整数),这样可增加第三者试图解密的难度,实际上由密钥r所得的实际加密操作码m并不大,方便操作;

    (2)、小写英文字母以外字符转换;

    注意到小写英文字母的ASII码至少为97,当明文中的字符s[j]<97时根据约定进行转换b[j]=s[j]-10-m;

    (3)、小写英文字母加密转换;

    注意到小写英文字母的ASII码为97~122,可知明文中的字母s[j]的对称字母为(97+122)-s[j],因而字母s[j]的加密字符b[j]为:

    • 若s[j]%2==0:b[j]=219-s[j]+m

    • 若s[j]%2>2:b[j]=219-s[j]-m

    在循环中逐个转换完毕,发布b数组即为密文;

    (4)、解密转换;

    解密时,根据接收到的密钥r与密文(b数组)逐个字符解密转换为明文c数组;

    1)、若b[j]<87时,则c[j]=b[j]+10+m;,即c[j]为原字符s[j];

    2)、若原码s[j]为偶数时,则219-s[j]为奇数,而加密时b[j]=219-s[j]+m;,因而b[j]+m=219-s[j]+2*m为奇数,即当(b[j]+m)%2>0:c[j]-219-b[j]+m;,c[j]为原字母s[j]

    3)、若原码s[j]为奇数时,则219-s[j]为偶数,而加密时b[j]=219-s[j]-m;,因而b[j]+m=219-s[j]为偶数,即当(b[j]+m)%2==0:c[j]=219-b[j]-m;,c[j]为原字母s[j]

    通过以上3步解密转换,所得c数组与原码s[j]完全相同,实现解密;

    3.程序设计:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
       char s[120];
       int d,j,m,n,r,b[120],c[120];
       printf("请输入明文:");
       gets(s);
       n=strlen(s);
       printf("请输入密钥(3~4位整数):");
       scanf("%d",&r);               /*确定密钥*/
       /*加密方实施加密*/
       m=0;
       d=r;
       while(d>0)
       {
          m+=(d%10);            /*根据事先约定把密钥r转换为加密操作码m*/
          d=d/10;
       }
       m=m%4+1;
       for(j=0;j<=n-1;j++)
          if(s[j]<97)
             b[j]=s[j]-10-m;    /*把明文字符逐个加密到b数组*/
          else if(s[j]%2==0)
             b[j]=219-s[j]+m;
          else
             b[j]=219-s[j]-m;
       printf("加密的密文:");
       for(j=0;j<=n-1;j++)
          printf("%c",b[j]);
       printf("\n");
       /*接收方实施解密*/
       m=0;
       d=r;
       while(d>0)
       {
          m+=(d%10);            /*根据事先约定把密钥r转换为加密操作码m*/
          d=d/10;
       }
       m=m%4+1;
       for(j=0;j<=n-1;j++)
          if(b[j]<87)
             c[j]=b[j]+10+m;
          else if((b[j]+m)%2>0)
             c[j]=219-b[j]+m;   /*把密文字符逐个解密到c数组*/
          else
             c[j]=219-b[j]-m;
       printf("解密为明文:");
       for(j=0;j<n-1;j++)
          printf("%c",c[j]);    /*输出解密明文*/
       printf("\n");
    }
    

    4.程序运行示例与说明:

    请输入明文:It is the man not the method that solves the problem
    请输入密钥(3~4位整数):2017
    加密的密文:<j!!oe!!jvs!!kwp!!pij!!jvs!!ksjviz!!jvwj!!eirhse!!jvs!!nli|rsk!
    解密为明文:It is the man not the method that solves the problem
    

    以上程序把文本字符分为3类进行加密解密,应该说有一定的防破解功能,其中大写字母I是按“其他字符”处理的;

    以上加密只根据字符本身的特性,使得明文中相同的字符在密文中也是相同的字符,例如,明文中有8个“t”,在密文中对应8个“j”;明文中有10个空格,在密文中对应10个“!!”,为改变这一在加密中的低级重复的现象,下面对密钥的处理与加密过程实施进一步的改进;

    5.改进加密算法:

    密钥加大至5~6位整数,同时加大对密钥r的处理难度:用其高位数字乘其他数字之和,所得之积除以4取余数加2,得加密操作码m

    加强对明文字符的加密:

    (1)、第一步加密处理

    把明文中的小写英文字母转换为其对称的字母,小写英文字母以外的字符ASII码全部减去15,以避免在下一步加密时发生重叠;

    (2)、第二步加密处理

    为改变相同字符在加密中的低级重复现象,加密时必须考虑字符在文本中的位置,

    对明文中第j个字符计算t=(j+m)%(2*m),其中m为密钥r转换的加密操作码,对该字符的ASII码加m减去t,即:

    • b[j]=b[j]+m-(j+m)%(2*m)

    注意到t=(j+m)%(2*m)可能比m大,也可能比m小,即明文中的字符有些增加,有些减少,以增加对加密的破解难度;

    解密是加密的逆过程,逐个字符恢复到源码即可;

    (3)、程序设计

    #include<stdio.h>
    #include<string.h>
    int main()
    {
       char b[120],c[120];
       int j,m,n;
       long d,r;
       char s[]="Couplet:放鹤去寻三岛客,任人来看四时花。";
       n=strlen(s);            /*输入明文*/
       printf("请输入密钥(5~6位整数):");
       scanf("%d",&r);         /*确定密钥*/
       /*加密方实施加密*/
       m=0;
       d=r;
       while(d>=10)
       {
          m+=(d%10);           /*根据事先约定把密钥r转换为加密操作码m*/
          d=d/10;
       }
       m=(d*m)%4+2;
       for(j=0;j<=n-1;j++)     /*加密第一步处理*/
          if(s[j]<97)
             b[j]=s[j]-15;
          else
             b[j]=219-s[j];
       for(j=0;j<=n-1;j++)
          b[j]=b[j]+m-(j+m)%(2*m);   /*加密第二步处理*/
       b[n]='\0';
       printf("加密的密文:");
       puts(b);                /*发布密文*/
       /*接收方实施解密*/
       m=0;
       d=r;
       while(d>=10)
       {
          m+=(d%10);           /*根据事先约定把密钥r转换为加密操作码m*/
          d=d/10;
       }
       m=(d*m)%4+2;
       for(j=0;j<=n-1;j++)     /*逐个字符分类解密*/
          if(b[j]<90)
             c[j]=b[j]+15-m+(j+m)%(2*m);
          else
             c[j]=219-b[j]+m-(j+m)%(2*m);
       c[n]='\0';
       printf("解密为明文:");    /*输出解密文*/
       puts(c);
       printf("\n");
    }
    

    (4)、程序运行示例与说明

    请输入密钥(5~6位整数):201706
    加密的密文:4khloui,ǖ箷蘑鬼ì敖枮咕唤堡拨即剑瑯敃
    解密为明文:Couplet:放鹤去寻三岛客,任人来看四时花。
    

    以上程序改变了明文的输入,且明文文本包含了汉字,因为以上加密解密操作能逐个字符通过解密恢复到原码,所以也适合对中文汉字的加密转换处理;

    加密解密是一个专业性很强的系统工程,内容丰富,算法精深,如果读者对专业加密解密算法有兴趣,请参阅相关的专业教程;

    展开全文
  • 加密与解密技术原理(密码学)

    千次阅读 2020-10-12 14:21:57
    加密与解密原理 1. 加密技术发展 加密是利用数学方法将明文转化为密文,从而达到保护数据的目的。 通过加密可保证数据的机密性、完整性、鉴别性、不可否认性。 机密性:通过数据加密实现。只允许特定用户访问和...

    加密与解密原理

    1. 加密技术发展

    1. 加密是利用数学方法将明文转化为密文,从而达到保护数据的目的。
    2. 通过加密可保证数据的机密性、完整性、鉴别性、不可否认性。

    机密性:通过数据加密实现。只允许特定用户访问和阅读信息。

    完整性:通过数字加密、散列、数字签名实现。确保数据在存储和传输过程中不被修改(篡改、删除、插入、重放等)。

    鉴别性:通过数字加密、散列、数字签名实现。提供数据和身份识别有关的服务,即 认证数据发送者和接收者的服务。

    不可否认性:通过对称和非对称加密、数字签名等,并借助可信的注册机构或证书机构来实现。提供阻止用户否认先前的言论或行为的抗抵赖服务。

    2. 加解密技术原理

    1. 对称加密:又称共享密钥加密,使用同一个密钥对数据进行加密解密。
    2. 非对称加密:加密解密使用不同密钥,用公钥加密,私钥解密
    3. 密钥:公钥 & 私钥

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mRSeUsC9-1602483457877)(C:\Users\MJ\AppData\Roaming\Typora\typora-user-images\1593867862633.png)]

    1. 数字信封

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zcokz5pC-1602483457880)(C:\Users\MJ\AppData\Roaming\Typora\typora-user-images\1593868799483.png)]

    甲事先获得乙的公钥,具体过程如下:

    甲用对称密钥将明文加密,生成密文信息

    甲再用乙的公钥将对称密钥加密,生成数字信封

    甲将数字信封和密文发送给乙

    乙用私钥解密数字信封,得到对称密钥

    乙再用对称密钥解密密文,得到明文

    1. 数字签名

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aklvgdui-1602483457883)(C:\Users\MJ\AppData\Roaming\Typora\typora-user-images\1593869181333.png)]

    数字指纹(消息摘要):

    (明文 ———HASH算法———>消息摘要)

    发送方用HASH算法将明文信息计算后得出的数据。

    数字签名:

    消息摘要 ———发送方的私钥加密 ———> 数字签名

    发送方用自己的私钥对数字指纹进行加密后得到的数据。

    采用数字签名时,接收方要用发送方的私钥解密才可以的到数字指纹。

    甲事先获得乙的公钥,具体过程如下:

    甲用乙的公钥对明文进行加密,得到密文

    甲用HASH算法将明文进行HASH运算,得到消息摘要

    甲用自己的私钥,将消息摘要进行加密,得到数字签名

    甲将密文信息和数值签名发送给乙

    乙用自己的私钥 解密密文信息,得到明文

    乙用甲的公钥将数字签名解密,得到消息摘要

    乙用HASH算法将明文信息进行HASH运算,得到消息摘要

    乙将生成的消息摘要与得到的消息摘要进行对比,如果一致则接收明文,如果不一致则丢弃明文

    3. 加解密常见算法

    对称加密算法

    流加密算法

    RC4

    分组加密算法

    DES

    3DES

    AES

    IDES

    RC2, RC5, RC6

    SM1, SM4

    非对称加密算法(公钥加密算法)

    DH

    RSA

    DSA

    散列算法(任意长度的输入变换成固定长度的输出)

    MD5

    SHA

    SM3

    展开全文
  • 加密与解密 第4版

    千次阅读 2019-06-10 19:22:00
    加密与解密 (豆瓣)https://book.douban.com/subject/3091212/ 《加密与解密(第4版)》-看雪安全论坛https://bbs.pediy.com/forum-99.htm [注意]《加密与解密(第4版)》勘误收集-《加密与解密(第4版)》-看雪安全论坛...
  • MySql字段内容加密与解密

    千次阅读 2020-03-11 15:16:23
    AES和DES 对于存储在数据库中的敏感信息,往往需要对其进行加密。MySql提供了多种加密...MySql提供了2个AES加密与解密的函数: AES_ENCRYPT('明文', 'key') // 加密 AES_DECRYPT('明文', 'key') // 解密 其中: ...
  • JAVA各种加密与解密方式

    万次阅读 多人点赞 2019-08-30 15:59:43
    之前有兴趣研究了一下java的加密解密的方法,发现市面上有好多种加密解密方式,在这里整理了一下。 目录 1.BASE64加密/解密 2.MD5(Message Digest Algorithm)加密/解密 3.DES(Data Encryption Standard)...
  • Python的加密与解密

    千次阅读 2019-06-21 16:28:06
    前言 ...1881年世界上的第一个电话 保密专利出现。... ... ...随着信息化和数字化社会的发展,...于是在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”, 民间力量开始全面介入密码学的研究和应用中,采用的...
  • RSA加密与解密

    千次阅读 2017-06-19 10:17:01
    RSA加密与解密RSA算法的密钥由公钥和私钥组成,公钥用于加密,私钥用于解密。顾名思义,公钥就是可以进行公开的密钥,一般可以公开给你的合作伙伴;私钥就是私有的,也就是只有你知道的,你的合作伙伴通过你提供的...
  • XML文件的加密与解密

    2015-06-25 12:32:12
    XML文件的加密与解密,因为相信,所以我去做!
  • # 凯撒密码加密与解密 # author Sundm string = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] # 密文列表 cipher_text_list = [] # 明文列表 ...
  • 13种加密与解密算法【一】

    千次阅读 2020-04-02 15:43:35
    这15种加密解密算法分别是:散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。【三种分类】1、对称加密:密钥只有一个,解密、解密都...
  • OpenCV python 图像加密与解密

    千次阅读 2019-12-17 15:55:27
    OpenCV python 图像加密与解密 source.jpg import cv2 import numpy as np def main(): # 1.导入图片 img_src = cv2.imread("source.jpg") width, height, deep = img_src.shape # 2.随机创建秘钥文件 img...
  • 一、恺撒加密可以点击进行学习...二、AES加密: private static string KEY = "123456_abcdeABCD"; private static string IV = "123456_abcdeABCD"; private IEnumerator AES_EncryptionAB() { WWW www = ...
  • 535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk. 要求:设计一个 TinyURL 的...
  • Python3中加密与解密详解

    万次阅读 2018-07-07 10:26:11
    转自:http://www.php.cn/python-tutorials-377249.htmlPython 3 的标准库中没多少用来解决加密的...我们将学习如何使用这两个库,来加密解密字符串。哈希如果需要用到安全哈希算法或是消息摘要算法,那么你可以使...
  • RSA加密与解密的流程方法

    千次阅读 2017-12-07 11:50:15
    加密——RSA前端后台的加密与解密什么是RSA加密RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要肜另一个才能解密,利用对极大整数做因数分解的难度决定了RSA...
  • Spring Cloud Config 中配置文件的加密与解密 上篇文章和大家聊了 Spring Cloud Config 分布式配置中心的基本用法,相信大家对 Spring Cloud Config 已经有了一个基本的认识。可能有读者也发现问题了,原本在非...
  • 文本文件的加密与解密

    千次阅读 2018-09-27 11:06:04
    其中包含实现安全的类,如加密解密,管理密钥,验证数据完整性等等。在加密和解密本地文档时使用Rijndael对称算法。 设计的窗体界面如下图所示,提前新建一个txt文本文件作为所要选择的文件,此代码可对加密后的...
  • C#中使用MD5对用户密码加密与解密

    千次阅读 2020-06-30 21:35:47
    C#中常涉及到对用户密码的加密解密的算法,其中使用MD5加密是最常见的的实现方式。本文总结了通用的算法并结合了自己的一点小经验,分享给大家。 一.使用16位、32位、64位MD5方法对用户名加密 1)16位的MD5加密 ...
  • des加密算法(js+java)加密与解密结果相同

    千次下载 热门讨论 2014-01-17 14:08:25
    des加密算法(js+java)加密解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密... des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给大家!
  • SHA-1加密与解密 特征

    千次阅读 2020-01-12 19:44:43
    通俗一点来说就是将一段明文通过一些手段进行加密加密过程暂不讨论),然后就可以得到一段不可逆的密文,也就是通过密文无法知道原文是什么; 特征: SHA-1加密后的密文是40个字符,并且由数字字母组成; ...
  • 密码加密与解密( SHA256等)

    千次阅读 2020-10-29 20:08:22
    对于密码SHA256加密,可以先暴力处理出所有短原码的加密结果,对于一个加密结果,... 好用的加密解密网站:https://www.cmd5.com 可以点击具体类型进行查询 对于加密,可以点击上图中的加密,进行相应的加密过程 ...
  • 一、创建预制体:用SphereCube临时创建了一个物体,就叫Sphere吧; 二、将这个预制体Sphere打包成assetbundle包,具体介绍可点击这里进行参考(是我之前写的文章); 选中Sphere预制体,设置AssetBundle名称为...
  • node插件, MD5密码加密 解密

    千次阅读 2020-08-09 17:46:18
    MD5加密插件 使用步骤1 : github搜索 MD5 步骤 二 : 2.1 安装插件: 终端输入 : npm install blueimp-md5 2.2 2.3 2.4 引入 : md5插件 2.5 获取 password的值 : let password = $("#password").val(); 调用...
  • 非对称加密与解密

    千次阅读 2018-06-23 20:05:56
    第一种是签名,使用私钥加密,公钥解密,用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改.但是不用来保证内容不被他人获得. 第二种是加密,用公钥加密,私钥解密,用于向公钥所有者发布...
  • base64加密与解密

    千次阅读 2018-07-31 10:33:25
    Base64的索引对应字符的关系如下表所示:   也就是说,如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8...
  • 几种常用加密手段的加密与解密

    万次阅读 多人点赞 2018-07-05 21:48:23
    网络中传输敏感信息的时候通常会对字符串做加密解密处理1.Base64位加密(可加密解密) 最简单的加密方式,没有密钥,这种方式只要让别人拿到你的密文,就可以直接解密,只能用来迷惑,一般情况下不单独使用,因为真...
  • jasypt中的加密与解密

    万次阅读 2018-11-23 09:27:35
    /** 配置加解密跟秘钥,配置文件的密文分开放 */ System.setProperty("jasypt.encryptor.password", ConstantValue.JASYPT_ENCRYPTOR_PASSWORD); SpringApplication.run(OrderApplication.class, args); } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 284,740
精华内容 113,896
关键字:

加密与解密