【加密算法 】
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
【分类】
加密技术通常分为两大类:“对称式”和“非对称式”。 对称式加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术目前被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56Bits。 非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
一个加密系统S可以用数学符号描述如下:
其中
P——明文空间,表示全体可能出现的明文集合,
C——密文空间,表示全体可能出现的密文集合,
K——密钥空间,密钥是加密算法中的可变参数,
E——加密算法,由一些公式、法则或程序构成,
D——解密算法,它是E的逆。
当给定密钥kÎK时,各符号之间有如下关系:
C = Ek(P), 对明文P加密后得到密文C
P = Dk(C) = Dk(Ek(P)), 对密文C解密后得明文P
如用E-1 表示E的逆,D-1表示D的逆,则有:
Ek = Dk-1且Dk = Ek-1
因此,加密设计主要是确定E,D,K。
RSA是Rivest、Shamir和Adleman提出来的基于数论非对称性(公开钥)加密算法。大整数的素因子难分解是RSA算法的基础。
RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。尽管RSA的许多特性并不十分理想,但迫于信息安全的实际需要,许多重要的信息系统还是采用RSA作为基础加密机制。从RSA提出不久,我国有关部门就一直对它进行研究。从应用的角度看,软件实现的RSA已经开始用于计算机网络加密,用来完成密钥分配、数字签名等功能。
除了RSA之外,还有DES(数据加密标准)。尽管DES公开了其加密算法并曾被美国列为“标准”,但很快被废弃。加密技术又回归到“算法保密”的传统上。
【常见加密算法】
DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
RC2和 RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
BLOWFISH:它使用变长的密钥,长度可达448位,运行速度很快;
MD5:严格来说不算加密算法,只能说是摘要算法
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
SSF33,SSF28,SCB2(SM1):国家密码局的隐蔽不公开的商用算法,在国内民用和商用的,除这些外,都不容许使用其他的.
【例子:破解Des加密算法6种方法】
目前加密算法有单密钥和公用密钥2种体制。单密钥体制中最著名的是DES加密算法,它是目前应用广泛的分组对称加密算法,广泛应用于卫星通信、网关服务器、视频传输、数字电视接收等方面。
1.暴力破解
(内容省略)
2.分布式计算
通过网络联合数台计算机一起计算.可以大大缩短时间.
3.专用设备破解(破解机)
暴力破解实在是太费时间,但是个人计算机不是最快的破解工具,PC终归是一种通用设备.在1998年,EFF为了向世人证明des不是一种安全的加密方式而制造了一台专用于破解des的机器,这台机器叫做Deep Crack ,总共耗资20万美元,该机器使用1536个专用处理器,平均破解(穷举)出一个正确的key需耗时4天左右. 每秒钟可以穷举920亿个key.
4.时间与数据量折衷法
这是马丁赫尔曼先生于1980年提出的一种可行的破解des的算法, 可以想象这样一种情况,我们有无穷多的存储器,我们预先把所有可能的key(A)和与某个明文通过这个key所得到的相应的密文(B)组成一对(A,B)存在存储器中.我们就可以通过数据库快速的找到我们需要的key,当我们有足够的存储器的时候,这是最快的方法,那么需要多少存储器呢??你可以自己算一下.
当然,我们没有那么多的硬盘来存这些数据,但是马丁赫尔曼提出了一种新的算法来解决这个问题,按照一定的规则选一部分key把相应的数据对(A,B)存在硬盘中,再按照相应的算法通过数据库的搜索结果,把正确的key锁定在很小的范围内,然后在这一范围内进行穷举.按照这一方法,一台普通的微机只需要1000G的硬盘和3天左右的时间就可以找到正确的key.
5.微分密码分析法
1990年,;两名以色列密码专家发明了一种新的方法来破解des,这就是微分密码分析法. 按照这一方法只需要对特殊的明文和密文成对采样247对,通过短时间的分析便可以得到正确的key.具体算法吗.....hehehe...:)
6.线性分析法.
日本三菱电子1994年发明的方法,按照这一方法如果我们有2^43==8'796'093'022'208个明文和密文对(约 64'000 GB),我们可以在短时间内计算出正确的key.
【CA系统加密算法】
【附件】
[PID算法 ]
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。
[比较典型的PID算法处理程序源代码]
=====================================================================================================*/
#include
#include
typedef struct PID {
double SetPoint; // 设定目标Desired value
double Proportion; // 比例常数Proportional Const
double Integral; // 积分常数Integral Const
double Derivative; // 微分常数Derivative Const
double LastError; // Error[-1]
double PrevError; // Error[-2]
double SumError; // Sums of Errors
} PID;
double PIDCalc( PID *pp, double NextPoint )
{
double dError,
Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
);
}
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}
/*====================================================================================================
Main Program
=====================================================================================================*
double sensor (void) // Dummy Sensor Function
{
return 100.0;
}
void actuator(double rDelta) // Dummy Actuator Function
{}
void main(void)
{
PID sPID; // PID Control Structure
double rOut; // PID Response (Output)
double rIn; // PID Feedback (Input)
PIDInit ( &sPID ); // Initialize Structure
sPID.Proportion = 0.5; // Set PID Coefficients
sPID.Integral = 0.5;
sPID.Derivative = 0.0;
sPID.SetPoint = 100.0; // Set PID Setpoint
for (;;) { // Mock Up of PID Processing
rIn = sensor (); // Read Input
rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
actuator ( rOut ); // Effect Needed Changes
}
注:
这是一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。