加密与解密(1)---基础理论篇

1.加密算法概述

加密算法根据内容是否可以还原分为 可逆加密和非可逆加密 。

可逆加密根据其加密解密是否使用的同一个密钥而可以分为 对称加密和非对称加密。

对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。

非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。

此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA算法是1977年发明的,全称是RSA Public Key System,这个Public Key就是指的公共密钥。

2、RSA加密算法的使用过程

同样以一个字符串来进行举例,例如要对字符串the art of programming进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。

1.      首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。

2.      对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。

3.      解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。

4.      根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。

3.RSA加密的缺点

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。

3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

时间: 2024-10-03 04:15:35

加密与解密(1)---基础理论篇的相关文章

网络传输的加密与解密(不是很难理解的一个版本)

--网络传输的加密与解密--    由于互联网早期并没有考虑到数据报文安全的问题,早期的理念都是基于进行通信的.现在随着网络兴起,互联网上慢慢有很多"犯罪团体",用较低的犯罪成本通常是基于一个网络通信协议的一个小的漏洞来完成窃取.篡改.重播其他人的数据报文. 而往往计算机网络安全维护者和那些恶意攻击者玩的就是一个类似猫鼠游戏,网络安全维护者处处考虑对计算机的安全负责,而恶意攻击者处处找安全的漏洞.而对于那些恶意攻击方式大体分两种. 一种叫被动攻击,大体上来说就是窃听,攻击者获得传输信息

利用ASP.NET加密和解密Web.config中连接字符串

介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, Ajax, JavaScript等的文章.大多数情况下,我都把数据库的连接字符串放在了web.config中.其中包含许多敏感信息,包括连接数据库的用户名密码等.然而我们在web.config和machine.config中以纯文本的方式保存密码安全吗? 如果我们的程序只是部署在内部服务器中,这应该没

java字符串加密与解密

原文:java字符串加密与解密 源代码下载地址:http://www.zuidaima.com/share/1557602896464896.htm 这段时间正好系统中有需要对密码进行加密,还要能进行解密,支持自定义密钥.现分享给大家,希望能帮助到牛牛们. 有些人可能会遇到com.sun.crypto.provider.SunJCE报错,是由于编译器(jdk1.7以下)对必须得库有一定的限制,因此无法构造改函数,解决方法是设置一下编译器的报错级别,具体的解决方法可以参照这篇文章: http://

加密和解密以及openssl应用

本篇文章主要讲解 一.加密.解密的三种方式 二.Openssl的基础应用以及创建CA证书颁发 ========================================================================= 一.数据加密的三种方式: 1.对称加密:是将加密或解密使用同一秘钥:并将数据明文分隔成固定大小的块,逐个进行加密.缺陷是秘钥过多,不利于记忆. 对称加密算法:DES(Data Encryption Standard, 56bits).3DES.AES: Ad

Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

自上一篇  Unity3d 游戏资源打包加密(图片/XML/TXT等) C#编码 (一)   介绍如何打包加密游戏资源已经好几月,却没有详细说明如何在游戏中去读取加密的资源,虽然聪明的程序员看一眼就知道如何逆向编码,但是还是详细说明一下,以作完结. 转自陈里陈外的博客 http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.cn Cocos2d-X 资源加密与解密 加密只有一篇即可,解密分为两篇,Cocos2d-x 篇 和 Unity3

gpg加密和解密

linux:gpg加密和解密 1 创建密钥 2 查看私钥 3 导出公钥 4 导出私钥 5 导入秘钥 5.1 公钥 6 公钥加密 7 私钥解密 创建密钥 gpg --gen-key 你要求输入一下内容,这些内容,基本英文,还是很好明白 [email protected]:~# gpg --gen-key gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc. This is free software: you a

SpringMVC请求参数北京PK10平台出租和响应结果全局加密和解密

前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.timestamp,long类型,时间戳.2.data,String类型,实际的业务请求数据转化成的Json字符串再进行加密得到的密文.3.sign,签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111),防篡改.为了简单起见,加密和解密采用AES,对称秘钥为"

Java结合keytool实现非对称加密和解密

在Java安全体系中,签名属于JAAS模块,加解密属于JCE模块.keytool的使用keytool是JDK自带的一个密钥库管理工具.这里只用到了keytool的部分功能,包括生成密钥对,导出公钥等.keytool生成的公钥/私钥对存放到一个到了一个文件中,这个文件有密码保护,通称为keystore.生成密钥对$ keytool -genkey -alias signLegal -keystore examplestanstore2 -validity 1800 -keyalg RSA生成别名为

Java DES 加密和解密源码

Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互作用性. 算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法的概念,而不用去关心如何实现这些概念.实现的独立性和相互作用性通过密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一个或多个程序包.软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来