173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

简单加密算法举例讲解

keros@mark 2022-10-23 资讯中心

本文目录一览

常用的数据加密算法有哪些

想要加密电脑内重要文件数据,可以直接使用加密软件来保护,方法简单便捷安全。据了解现在市面上的加密软件都是采用的透明加密,可以对文件进行受控加密,在内部环境是可以正常打开使用的,脱离内部环境则打不开或者乱码,可以设置禁止拷贝、复制、修改、截屏等。文件外发需要授权,未授权解密无论以任何形式发出都是无法正常打开使用的。还可设置文件外发的浏览次数与打开时间。

常见密码技术简介

##

密码技术在网络传输安全上的应用

随着互联网电子商务和网络支付的飞速发展,互联网安全已经是当前最重要的因素之一。作为一名合格的软件开发工程师,有必要了解整个互联网是如何来保证数据的安全传输的,本篇文章对网络传输安全体系以及涉及到的算法知识做了一个简要的介绍,希望大家能够有一个初步的了解。

###密码技术定义

简单的理解,密码技术就是编制密码和破译密码的一门技术,也即是我们常说的加密和解密。常见的结构如图:

其中涉及到的专业术语:

1.秘钥:分为加密秘钥和解密秘钥,两者相同的加密算法称为对称加密,不同的称为非对称加密

2.明文:未加密过的原文信息,不可以被泄露;

3.密文:经过加密处理后的信息,无法从中获取有效的明文信息;

4.加密:明文转成密文的过程,密文的长度根据不同的加密算法也会有不同的增量;

5.解密:密文转成明文的过程;

6.加密/解密算法:密码系统使用的加密方法和解密方法;

7.攻击:通过截获数据流、钓鱼、木马、穷举等方式最终获取秘钥和明文的手段。

###密码技术和我们的工作生活息息相关

在我们的日常生活和工作中,密码技术的应用随处可见,尤其是在互联网系统上。下面列举几张比较有代表性的图片,所涉及到的知识点后面都会一一讲解到。

1.12306旧版网站每次访问时,浏览器一般会提示一个警告,是什么原因导致的? 这样有什么风险呢?

2.360浏览器浏览HTTPS网站时,点开地址栏的小锁图标会显示加密的详细信息,比如百度的话会显示```aes_128_GCM、ECDHE_RSA```,这些是什么意思?

3.在Mac系统的钥匙串里有很多的系统根证书,展开后有非常多的信息,这些是做什么用的?

4.去银行开通网上支付都会附赠一个U盾,那U盾有什么用呢?

##如何确保网络数据的传输安全

接下来我们从实际场景出发,以最常见的客户端Client和服务端Server传输文件为例来一步步了解整个安全体系。

####1. 保密性

首先客户端要把文件送到服务端,不能以明文形式发送,否则被黑客截获了数据流很容易就获取到了整个文件。也就是文件必须要确保保密性,这就需要用到对称加密算法。 

** 对称加密: **加密和解密所使用的秘钥相同称为对称加密。其特点是速度快、效率高,适用于对较大量的数据进行加密。常见的对称加密算法有DES、3DES、aes、TDEA、RC5等,让我们了解下最常见的3DES和aes算法:

** DES(Data Encryption Standard): **1972年由美国IBM研制,数学原理是将明文以8字节分组(不足8位可以有不同模式的填充补位),通过数学置换和逆置换得到加密结果,密文和明文长度基本相同。秘钥长度为8个字节,后有了更安全的一个变形,使用3条秘钥进行三次加密,也就是3DES加密。

**3DES:**可以理解为对明文进行了三次DES加密,增强了安全程度。

** aes(Advanced Encryption Standard): **2001年由美国发布,2002年成为有效标准,2006年成为最流行的对称加密算法之一。由于安全程度更高,正在逐步替代3DES算法。其明文分组长度为16字节,秘钥长度可以为16、24、32(128、192、256位)字节,根据秘钥长度,算法被称为aes-128、aes-192和aes-256。

对称加密算法的入参基本类似,都是明文、秘钥和模式三个参数。可以通过网站进行模拟测试:[]()。其中的模式我们主要了解下ECB和CBC两种简单模式,其它有兴趣可自行查阅。

** ECB模式(Electronic Codebook Book): **这种模式是将明文分成若干小段,然后对每一段进行单独的加密,每一段之间不受影响,可以单独的对某几段密文进行解密。

** CBC模式(Cipher Block Chaining): **这种模式是将明文分成若干小段,然后每一段都会和初始向量(上图的iv偏移量)或者上一段的密文进行异或运算后再进行加密,不可以单独解密某一断密文。

 ** 填充补位: **常用为PKCS5Padding,规则为缺几位就在后面补几位的所缺位数。,比如明文数据为```/x01/x01/x01/x01/x01/x01```6个字节,缺2位补```/x02```,补完位```/x01/x01/x01/x01/x01/x01/x02/x02```。解密后也会按照这个规则进行逆处理。需要注意的是:明文为8位时也需要在后面补充8个```/x08```。

####2. 真实性

客户端有了对称秘钥,就需要考虑如何将秘钥送到服务端,问题跟上面一样:不能以明文形式直接传输,否则还是会被黑客截获到。这里就需要用到非对称加密算法。

** 非对称加密: **加密和解密秘钥不同,分别称为公开秘钥(publicKey)和私有秘钥(privateKey)。两者成对出现,公钥加密只能用私钥解密,而私钥加密也只能用公钥加密。两者不同的是:公钥是公开的,可以随意提供给任何人,而私钥必须保密。特点是保密性好,但是加密速度慢。常见的非对称加密算法有RSA、ECC等;我们了解下常见的RSA算法:

** RSA(Ron Rivest、Adi Shamir、Leonard Adleman): **1977年由麻省理工学院三人提出,RSA就是他们三个人的姓氏开头字母拼在一起组成的。数学原理是基于大数分解。类似于```100=20x5```,如果只知道100的话,需要多次计算才可以试出20和5两个因子。如果100改为极大的一个数,就非常难去试出真正的结果了。下面是随机生成的一对公私钥:

这是使用公钥加密后结果:

RSA的这种特性就可以保证私钥持有者的真实性,客户端使用公钥加密文件后,黑客就算截获到数据因为没有私钥也是无法解密的。

** Tips: **

+** 不使用对称加密,直接用RSA公私钥进行加密和解密可以吗? **

答案:不可以,第一是因为RSA加密速度比对称加密要慢几十倍甚至几百倍以上,第二是因为RSA加密后的数据量会变大很多。

+** 由服务端生成对称秘钥,然后用私钥加密,客户端用公钥解密这样来保证对称秘钥安全可行吗? **

答案:不可行,因为公钥是公开的,任何一个人都可以拿到公钥解密获取对称秘钥。

####3. 完整性

当客户端向服务端发送对称秘钥加密后的文件时,如果被黑客截获,虽然无法解密得到对称秘钥。但是黑客可以用服务端公钥加密一个假的对称秘钥,并用假的对称秘钥加密一份假文件发给服务端,这样服务端会仍然认为是真的客户端发送来的,而并不知道阅读的文件都已经是掉包的了。

这个问题就需要用到散列算法,也可以译为Hash。常见的比如MD4、MD5、SHA-1、SHA-2等。

** 散列算法(哈希算法): **简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。而且该过程是不可逆的,无法通过摘要获得原文。

** SHA-1(Secure Hash Algorithm 1): **由美国提出,可以生成一个20字节长度的消息摘要。05年被发现了针对SHA-1的有效攻击方法,已经不再安全。2010年以后建议使用SHA-2和SHA-3替代SHA-1。

** SHA-2(Secure Hash Algorithm 2): **其下又分为六个不同算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA512/256。其后面数字为摘要结果的长度,越长的话碰撞几率越小。SHA-224的使用如下图:

客户端通过上面的散列算法可以获取文件的摘要消息,然后用客户端私钥加密后连同加密的文件发给服务端。黑客截获到数据后,他没有服务端私钥无法获取到对称秘钥,也没有客户端私钥无法伪造摘要消息。如果再像上面一样去掉包文件,服务端收到解密得到摘要消息一对比就可以知道文件已经被掉包篡改过了。

这种用私钥对摘要消息进行加密的过程称之为数字签名,它就解决了文件是否被篡改问题,也同时可以确定发送者身份。通常这么定义:

** 加密: **用公钥加密数据时称为加密。

** 签名: **用私钥加密数据时称为签名。

####4. 信任性

我们通过对称加密算法加密文件,通过非对称加密传输对称秘钥,再通过散列算法保证文件没被篡改过和发送者身份。这样就安全了吗?

答案是否定的,因为公钥是要通过网络送到对方的。在这期间如果出现问题会导致客户端收到的公钥并不一定是服务端的真实公钥。常见的** 中间人攻击 **就是例子:

** 中间人攻击MITM(Man-in-the-MiddleAttack): **攻击者伪装成代理服务器,在服务端发送公钥证书时,篡改成攻击者的。然后收到客户端数据后使用攻击者私钥解密,再篡改后使用攻击者私钥签名并且将攻击者的公钥证书发送给服务器。这样攻击者就可以同时欺骗双方获取到明文。

这个风险就需要通过CA机构对公钥证书进行数字签名绑定公钥和公钥所属人,也就是PKI体系。

** PKI(Privilege Management Infrastructure): **支持公钥管理并能支持认证、加密、完整性和可追究性的基础设施。可以说整个互联网数据传输都是通过PKI体系进行安全保证的。

** CA(Certificate Authority): **CA机构就是负责颁发证书的,是一个比较公认的权威的证书发布机构。CA有一个管理标准:WebTrust。只有通过WebTrust国际安全审计认证,根证书才能预装到主流的浏览器而成为一个全球可信的认证机构。比如美国的GlobalSign、VeriSign、DigiCert,加拿大的Entrust。我国的CA金融方面由中国人民银行管理CFCA,非金融CA方面最初由中国电信负责建设。

CA证书申请流程:公司提交相应材料后,CA机构会提供给公司一张证书和其私钥。会把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹,并把指纹和指纹算法用自己的私钥进行加密。由于浏览器基本都内置了CA机构的根证书,所以可以正确的验证公司证书指纹(验签),就不会有安全警告了。

但是:所有的公司其实都可以发布证书,甚至我们个人都可以随意的去发布证书。但是由于浏览器没有内置我们的根证书,当客户端浏览器收到我们个人发布的证书后,找不到根证书进行验签,浏览器就会直接警告提示,这就是之前12306打开会有警告的原因。这种个人发布的证书,其实可以通过系统设置为受信任的证书去消除这个警告。但是由于这种证书机构的权威性和安全性难以信任,大家最好不要这么做。

我们看一下百度HTTPS的证书信息:

其中比较重要的信息:

签发机构:GlobalSign Root CA;

有效日期:2018-04-03到2019-05-26之间可用;

公钥信息:RSA加密,2048位;

数字签名:带 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )

绑定域名:再进行HTTPS验证时,如果当前域名和证书绑定域名不一致,也会出现警告;

URI:在线管理地址。如果当前私钥出现了风险,CA机构可以在线吊销该证书。

####5. 不可抵赖性

看起来整个过程都很安全了,但是仍存在一种风险:服务端签名后拒不承认,归咎于故障不履行合同怎么办。

解决方法是采用数字时间戳服务:DTS。

** DTS(digital time-stamp): **作用就是对于成功的电子商务应用,要求参与交易各方不能否认其行为。一般来说,数字时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash算法运算形成摘要,然后将该摘要发送到DTS。DTS在加入了收到文件摘要的日期和事件信息后再对该文件进行数字签名,然后送达用户。

####6. 再次认证

我们有了数字证书保证了身份的真实性,又有了DTS提供的不可抵赖性。但是还是不能百分百确定使用私钥的就是合法持有者。有可能出现被别人盗用私钥进行交易的风险。

解决这个就需要用到强口令、认证令牌OTP、智能卡、U盾或生物特征等技术对使用私钥的当前用户进行认证,已确定其合法性。我们简单了解下很常见的U盾。

** USB Key(U盾): **刚出现时外形比较像U盘,安全性能像一面盾牌,取名U盾。其内部有一个只可写不可读的区域存储着用户的私钥(也有公钥证书),银行同样也拥有一份。当进行交易时,所有涉及到私钥的运算都在U盾内部进行,私钥不会泄露。当交易确认时,交易的详细数据会显示到U盾屏幕上,确认无误后通过物理按键确认就可以成功交易了。就算出现问题黑客也是无法控制U盾的物理按键的,用户可以及时取消避免损失。有的U盾里面还有多份证书,来支持国密算法。

** 国密算法: **国家密码局针对各种算法制定了一些列国产密码算法。具体包括:SM1对称加密算法、SM2公钥算法、SM3摘要算法、SM4对称加密算法、ZUC祖冲之算法等。这样可以对国产固件安全和数据安全进行进一步的安全控制。

## HTTPS分析

有了上面的知识,我们可以尝试去分析下HTTPS的整个过程,用Wireshark截取一次HTTPS报文:

Client Hello: 客户端发送Hello到服务端443端口,里面包含了随机数、客户端支持的加密算法、客户端的TLS版本号等;

Server Hello: 服务端回应Hello到客户端,里面包含了服务端选择的加密套件、随机数等;

Certificate: 服务端向客户端发送证书

服务端计算对称秘钥:通过ECDH算法得到对称秘钥

客户端计算对称秘钥:通过ECDH算法得到对称秘钥

开始用对称秘钥进行加密传输数据

其中我们又遇到了新的算法:DH算法

** DH(Diffie-Hellman): **1976年由Whitefield与Martin Hellman提出的一个奇妙的秘钥交换协议。这个机制的巧妙在于可以通过安全的方式使双方获得一个相同的秘钥。数学原理是基于原根的性质,如图:

*** DH算法的用处不是为了加密或解密消息,而是用于通信双方安全的交换一个相同的秘钥。 ***

** ECDH: **基于ECC(椭圆曲线密码体制)的DH秘钥交换算法,数学原理是基于椭圆曲线上的离散对数问题。

** ECDHE: **字面少了一个E,E代表了临时。在握手流程中,作为服务器端,ECDH使用证书公钥代替Pb,使用自身私钥代替Xb。这个算法时服务器不发送server key exchange报文,因为发送certificate报文时,证书本身就包含了Pb信息。

##总结

| 算法名称  | 特点 | 用处 | 常用算法名 |

| --- | :--- | :---: | ---: |

| 对称加密  | 速度快,效率高| 用于直接加密文件 | 3DES、aes、RC4 |

| 非对称加密  | 速度相对慢,但是确保安全 | 构建CA体系 | RSA、ECC |

| 散列算法 | 算出的摘要长度固定,不可逆 | 防止文件篡改 | SHA-1、SHA-2 |

| DH算法 | 安全的推导出对称秘钥 | 交换对称秘钥 | ECDH |

----

用c语言设计一个简单地加密算,解密算法,并说明其中的原理

可能很长 ,这是在我以前一个程序里摘出来的。

原理:用户输入创建密码,机器读取,并把每一位密码进行加密,这里就是把每一位的 ASCII码加一(也可以有其他的加密方式),然后保存在文件里。解密时从文件中读取保存的乱码,然后把它每一位的ascII码减一 在与你输入的密码比较,正确既可以进入。

#define CODE_SIZE 10

int password()

{

FILE *fp;

char s1[CODE_SIZE], s2[CODE_SIZE], s3[CODE_SIZE], fun;

while (1)

{

fp = fopen("password.txt", "r");

if (fp == NULL)

{

printf("第一次运行,请输入初始密码(最多8位):\n");

scanf("%s", s1);

printf("请再次输入初始密码:\n");

scanf("%s", s2);

if (strcmp(s1, s2) == 0)

{

fp = fopen("password.txt", "w+");

if (fp == NULL)

{

printf("创建文件失败退出\n");

getch();

exit(1);

}

else

{

//对s1加密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] + i;

}

fputs(s1, fp);

printf("初始密码创建完成.\n");

}

}

else

{

printf("两次输入的密码不一致!\n");

}

fclose(fp);

}

else

{

fgets(s1, CODE_SIZE, fp);

fclose(fp);

printf("输入密码:\n");

scanf("%s", s2);

//对s1解密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] - i;

}

loop:

if (strcmp(s1, s2) == 0)

{

printf("-----密码正确-----\n");

printf("-----请选择功能-----\n");

printf("-----1:修改密码-----\n");

printf("-----2:进入通讯录-----\n");

scanf("%d", fun);

switch (fun)

{

case 1: printf("请输入新密码\n");

scanf("%s", s1);

printf("请再次输入新密码\n");

scanf("%s", s2);

if (strcmp(s1, s2) == 0)

{

fp = fopen("password.txt", "w+");

if (fp == NULL)

{

printf("文件错误!\n");

}

else

{ //对s1加密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] + i;

}

fputs(s1, fp);

fclose(fp);

printf("密码修改成功\n");

}

}

else

{

printf("两次输入的密码不一致,修改失败\n");

}

break;

case 2: return 1;

default: printf("无效指令\n");

}

}

else

{

printf("密码错误\n请重新输入\n");

scanf("%s", s2);

goto loop;

}

}

printf("------------------\n\n\n\n");

}

}

RSA加密算法简易演示

RSA算法安全性本质是三大数学困难问题之一也就是大数分解问题,因为目前尚没有一种有效的方法可以在短时间内分解两个大素数的乘积。验证步骤如上面所说的,原理书上有,具体程序实现简单讲一下

判断质数,这是基本水平,可以穷举也可以建表,按自己喜好

这一步是计算两个大素数乘积没什么好说的

判断两个数互质,一般采用欧几里得算法,辗转相除直到得到gcd(e1,m)=1。当然你也可以穷举公因数一直到sqrt(min{e1,m})

计算乘法逆元是依靠广义欧几里得算法,乘法逆元的意思是形如a*a1 ≡ 1(mod m)这样的(因为这里的群的乘法定义就是数学乘法),a和a1互为彼此模m的逆元,记作a1=a^-1 mod m,只有gcd(a,m)=1时才有唯一解否则无解。

计算方法是广义欧几里得除法,设r0=m,r1=a,s0=1,s1=0,t0=0,t1=1;

计算ai=[r(i-1)/ri],r(i+1)=r(i-1)-airi,s(i+1)=s(i-1)-aisi,t(i+1)=t(i-1)-aiti,直到ri=0

举例如a=7,m=13,计算a^-1 mod m:

a1=[13/7]=1,r2=r0-a1r1=6,s2=s0-a1s1=1,t2=t0-a1t1=-1;

a2=[7/6]=1,r3=r1-a2r2=1,s3=s1-a2s2=-1,t3=t1-a2t2=2;

a3=[6/1]=6,r4=r2-a3r3=0.

取s=s3=-1,t=t3=2,则有7*2-1*13=1,故a^-1 mod m=t=2。

把上面的方法写成C++算法应该很简单

5和6都是计算同余没什么好说的,记得要用到a^e≡b^e(mod m)化简

要毕业了还搞不懂逆元有点拙计啊,回去好好看看离散数学吧

简述加密技术的基本原理,并指出有哪些常用的加密体制及其代表算法

1、对称加密算法

对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。

3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

aes(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

算法原理

aes 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。aes 使用几种不同的方法来执行排列和置换运算。

2、非对称算法

常见的非对称加密算法如下:

RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;

DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);

ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

算法原理——椭圆曲线上的难题

椭圆曲线上离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。

将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,将椭圆曲线中的乘法运算与离散对数中的模幂运算相对应,我们就可以建立基于椭圆曲线的对应的密码体制。

请简述数字加密的过程

在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。

接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

扩展资料:

数字加密注意事项:

通过TCP三次握手进行连接,然后客户端发送hello包到服务端,服务端回应一个hello包,如果客户端需要再次发送数字证书, 则发送数字证书到客户端。

客户端得到服务器的证书后通过CA服务验证真伪、验证证书的主体与访问的主体是否一致,验证证书是否在吊销证书列表中。如果全部通过验证则与服务器端进行加密算法的协商。

用证书中服务器的公钥加密对称秘钥发送给服务器端,对称秘钥只能用服务器的私钥进行解密,当服务器通过私钥解密对称秘钥后。使用对称秘钥将客户端请求的数据发送到客户端,客户端在用对称秘钥进行解密,从而得到想要的数据。

参考资料来源:百度百科-数字加密标准

智能化时代的到来涉及了各种核心算法,保护算法就能保障开发者权益,杜绝市面上各种山寨品,加密芯片恰好能起到很好的保护作用,如何选择加密芯片呢?KEROS加密芯片专注于加密领域十余年,行业首选。
1.安全性:采用国际通用aes256算法加密并同时通过KAS传送,除基本认证之外,利用2K安全EEPROM,用户可以自己管理密钥和数据,实现双重保护。
2.唯一性:以定制的方式为每一位用户单独定制“专属型号CID”,多用户之间算法不兼容,并且采用固化的方法直接将算法固化到晶圆上而无需烧入。
3.序列号:每颗芯片制造生产时具有5字节全球唯一SN序列号,每颗芯片SN都不会重复。
4.防抄特性:每颗芯片都有自己独特的密钥系统,破解单颗芯片只对这颗芯片对应的产品有效,对整个同类型的产品是无效的,依旧无法通过验证。而且KEROS采用ASIC方法设计,芯片内为纯逻辑电路,封装内有40多层逻辑电路整合了10万多个逻辑门,爆力刨片破解难度可想而知。
5.安全存储:用户可以将保密数据加密之后安全的存放到EEPROM中。简单加密算法举例讲解的介绍就聊到这里吧,感谢你花时间阅读本站内容。

本文标签:简单加密算法举例讲解

产品列表
产品封装
友情链接