当前位置:首页 » 密码管理 » 制作对称加密

制作对称加密

发布时间: 2022-07-16 04:09:31

㈠ 对称加密算法的加密算法主要有哪些

1、3DES算法

3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:

3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

3DES解密过程为:M=Dk1(EK2(Dk3(C)))

2、Blowfish算法

BlowFish算法用来加密64Bit长度的字符串。

BlowFish算法使用两个“盒”——unsignedlongpbox[18]和unsignedlongsbox[4,256]。

BlowFish算法中,有一个核心加密函数:BF_En(后文详细介绍)。该函数输入64位信息,运算后,以64位密文的形式输出。用BlowFish算法加密信息,需要两个过程:密钥预处理和信息加密。

分别说明如下:

密钥预处理:

BlowFish算法的源密钥——pbox和sbox是固定的。我们要加密一个信息,需要自己选择一个key,用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。具体的变化算法如下:

1)用sbox填充key_sbox

2)用自己选择的key8个一组地去异或pbox,用异或的结果填充key_pbox。key可以循环使用。

比如说:选的key是"abcdefghijklmn"。则异或过程为:

key_pbox[0]=pbox[0]abcdefgh;

key_pbox[1]=pbox[1]ijklmnab;

…………

…………

如此循环,直到key_pbox填充完毕。

3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1],i=0;

4)用BF_En加密替换后的key_pbox,key_pbox[i+1],用输出替代key_pbox[i+2]和key_pbox[i+3];

5)i+2,继续第4步,直到key_pbox全部被替换;

6)用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox信息加密。

信息加密就是用函数把待加密信息x分成32位的两部分:xL,xRBF_En对输入信息进行变换。

3、RC5算法

RC5是种比较新的算法,Rivest设计了RC5的一种特殊的实现方式,因此RC5算法有一个面向字的结构:RC5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。

(1)制作对称加密扩展阅读:

普遍而言,有3个独立密钥的3DES(密钥选项1)的密钥长度为168位(三个56位的DES密钥),但由于中途相遇攻击,它的有效安全性仅为112位。密钥选项2将密钥长度缩短到了112位,但该选项对特定的选择明文攻击和已知明文攻击的强度较弱,因此NIST认定它只有80位的安全性。

对密钥选项1的已知最佳攻击需要约2组已知明文,2部,2次DES加密以及2位内存(该论文提到了时间和内存的其它分配方案)。

这在现在是不现实的,因此NIST认为密钥选项1可以使用到2030年。若攻击者试图在一些可能的(而不是全部的)密钥中找到正确的,有一种在内存效率上较高的攻击方法可以用每个密钥对应的少数选择明文和约2次加密操作找到2个目标密钥中的一个。

㈡ 对称加密的工作过程

下面举个例子来简要说明一下对称加密的工作过程。甲和乙是一对生意搭档,他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。
上面是一个将重要资源安全传递到目的地的传统方式,只要甲乙小心保管好钥匙,那么就算有人得到保险盒,也无法打开。这个思想被用到了现代计算机通信的信息加密中。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

㈢ 对称密钥加密技术的工作流程

SQL Server 2005一个令人激动的特性是内置了加密的功能。在这个新版的SQL Server中,开发团队直接在T-SQL中加入了加密工具、证书创建和密钥管理的功能。对于因为法律要求或商业需求而需要加密表中的数据的人来说,这是一个好礼物。对于犹豫是否用加密来保证数据安全的人来说,做决定也更容易了。这篇文章介绍新的加密功能是怎么工作,怎么使用。

TSQL现在支持使用对称密钥和非对称密钥,证书和密码。本文介绍如何创建、管理和使用对称密钥和证书。

根据涉及的内容,我决定把本文分为三节:

第一部分:服务主密钥和数据库主密钥
第二部分:证书
第三部分:对称密钥

1. 服务主密钥和数据库主密钥

图:SQL Server 2005加密层次结构

1.1 服务主密钥

当第一次需要使用服务主密钥对链接服务器密码、凭据或数据库主密钥进行加密时,便会自动生成服务主密钥。服务主密钥为 SQL Server 加密层次结构的根。服务主密钥直接或间接地保护树中的所有其他密钥和机密内容。使用本地计算机密钥和 Windows 数据保护 API 对服务主密钥进行加密。该 API 使用从 SQL Server 服务帐户的 Windows 凭据中派生出来的密钥。

因为服务主密钥是自动生成且由系统管理的,它只需要很少的管理。服务主密钥可以通过BACKUP SERVICE MASTER KEY语句来备份,格式为:

BACKUP SERVICE MASTER KEY TO FILE = 'path_to_file' ENCRYPTION BY PASSWORD = 'password'

'path_to_file' 指定要将服务主密钥导出到的文件的完整路径(包括文件名)。此路径可以是本地路径,也可以是网络位置的 UNC 路径。

'password' 用于对备份文件中的服务主密钥进行加密的密码。此密码应通过复杂性检查。

应当对服务主密钥进行备份,并将其存储在另外一个单独的安全位置。创建该备份应该是首先在服务器中执行的管理操作之一。

如果需要从备份文件中恢复服务主密钥,使用RESTORE SERVICE MASTER KEY语句。

RESTORE SERVICE MASTER KEY FROM FILE = 'path_to_file'
DECRYPTION BY PASSWORD = 'password' [FORCE]

'path_to_file' 指定存储服务主密钥的完整路径(包括文件名)。path_to_file 可以是本地路径,也可以是网络位置的 UNC 路径。

PASSWORD = 'password' 指定对从文件中导入的服务主密钥进行解密时所需的密码。

FORCE 即使存在数据丢失的风险,也要强制替换服务主密钥。

注:如果你在使用RESTORE SERVICE MASTER KEY时不得不使用FORCE选项,你可能会遇到部分或全部加密数据丢失的情况。

如果你的服务主密钥泄露了,或者你想更改SQL Server服务帐户,你可以通过ALTERSERVICE MASTER KEY语句重新生成或者恢复服务主密钥。它的用法请参考联机丛书。

因为服务主密钥是SQL Server自动生成的,所以,它没有对应的CREATE和DROP语句。

1.2 数据库主密钥

正如每个SQL Server有一个服务主密钥,每个数据库有自己的数据库主密钥。数据库主密钥通过CREATE MASTER KEY语句生成:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
这个语句创建数据库主密钥,使用指定的密码加密它,并保存在数据库中。同时,数据库主密钥也被使用服务主密钥加密之后保存在master数据库中,这就是所谓的“自动密钥管理”。这个特性我们待会再讲。

象服务主密钥一样,你可以备份和恢复数据库主密钥。使用BACKUP MASTER KEY备份数据库主密钥。语法类似于备份服务主密钥:
BACKUP MASTER KEY TO FILE = 'path_to_file'
ENCRYPTION BY PASSWORD = 'password'

恢复数据库主密钥使用RESTORE MASTER KEY语句,它需要使用DECRYPTION BY PASSWORD子句提供备份时指定的加密密码,还要使用ENCRYPTION BY PASSWORD子句,SQL Server使用它提供的密码来加密数据库主密钥之后保存在数据库中。
RESTORE MASTER KEY FROM FILE = 'path_to_file'
DECRYPTION BY PASSWORD = 'password'
ENCRYPTION BY PASSWORD = 'password'
[ FORCE ]

同样,FORCE表示你将忽略在解密过程中的错误。

建议你在创建了数据库主密钥之后立即备份数据库主密钥,并把它保存到一个安全的地方。同样,使用FORCE语句可能导致已加密数据的丢失。

要删除数据库主密钥,使用DROP MASTER KEY语句,它删除当前数据库的主密钥。在执行之前,确定你在正确的数据库上下文中。

1.3 自动密钥管理

当创建数据库主密钥时,它被使用提供的密码加密然后被保存到当前数据库中。同时,它被使用服务主密钥加密并保存到master数据库中。这份保存的数据库主密钥允许服务器在需要的时候解密数据库主密钥,这就是自动密钥管理。没有自动密钥管理的话,你必须在每次使用证书或密钥加密或解密数据(它需要使用数据库主密钥)时使用OPEN MASTER KEY语句同时提供加密的密码。使用自动密钥管理,你不需要执行OPEN MASTER KEY语句,也不需要提供密码。

自动密钥管理的缺点就是每个sysadmin角色的成员都能够解密数据库主密钥。你可以通过ALTER MASTER KEY语句的DROP ENCRYPTION BY SERVICE MASTER KEY子句,从而不使用自动密钥管理。ALTER MASTER KEY的使用方法参见联机丛书。

㈣ 对称密钥加密是如何进行的

对称密钥加密也叫秘密/专用密钥加密(Secret Key Encryption),即发送和接收数据的双方必须使用相同的/对称的密钥对明文进行加密和解密运算。
非对称密钥加密也叫公开密钥加密(Public Key Encryption),是指每个人都有一对唯一对应的密钥:公开密钥和私有密钥,公钥对外公开,私钥由个人秘密保存;用其中一把密钥来加密,就只能用另一把密钥来解密。发送数据的一方用另一方的公钥对发送的信息进行加密,然后由接受者用自己的私钥进行解密。公开密钥加密技术解决了密钥的发布和管理问题,是目前商业密码的核心。使用公开密钥技术,进行数据通信的双方可以安全地确认对方身份和公开密钥,提供通信的可鉴别性。

㈤ 加密技术的对称加密

任何用户如果想利用加密技术进行相互通信,首先都需要共有一个的密钥。密钥和算法保密,由通信双方妥善保管。
使用对称加密技术对文件进行加密传输的实际过程分为三步:
首先,通信双方利用绝对安全的渠道,协商确定共有密钥,并妥善保管;
然后,发送方对需要传输的文件用自己的密钥进行加密,然后通过网络把加密后的文件传输到接收方;
最后,接收方用自己的密钥(实际上与发送方的密钥相同)对收到的密文进行解密,最后得到发送方的明文。

㈥ 什么是对称加密

对称加密采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

㈦ 求简单的对称加密算法!!!!!!!!

你的加密有问题 会有歧义码:
比如0->3 9->3 如果还原的话 3 还原到0,9就丢失了:
因为-1%9 = -1 所以要还原必须再多加一个周期
(9-1)%9 = 8:
void DeChar(char* p)
{
for( int i=0; i<strlen(p); i++ )
{
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] - 3 + '9'-'0') - '0') % ('9'-'0')) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] - 4 + 'z' - 'a' ) - 'a') % ('z' - 'a') ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] - 5 + 'Z' - 'A' )- 'A') % ('Z' - 'A')) + 'A';
}
}
}

把取模增加1就好了 改一下:
void EnChar(char* p)
{
for( int i=0; i<strlen(p); i++ )
{
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] + 3) - '0') % ('9'-'0'+1)) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] + 4) - 'a') % ('z' - 'a'+1) ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] + 5) - 'A') % ('Z' - 'A'+1)) + 'A';
}
}
}

void DeChar(char* p)
{
for( int i=0; i<strlen(p); i++ )
{
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] - 3 + '9'-'0'+1) - '0') % ('9'-'0'+1)) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] - 4 + 'z' - 'a'+1 ) - 'a') % ('z' - 'a'+1) ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] - 5 + 'Z' - 'A' +1)- 'A') % ('Z' - 'A'+1)) + 'A';
}
}
}

热点内容
sql语句查询字段 发布:2025-07-13 22:24:20 浏览:632
python目录遍历 发布:2025-07-13 22:16:24 浏览:96
卖房说解压 发布:2025-07-13 22:06:49 浏览:216
C加密传输 发布:2025-07-13 22:06:08 浏览:162
配置不合理怎么解决 发布:2025-07-13 22:01:07 浏览:735
linux毫秒 发布:2025-07-13 21:56:09 浏览:830
编译器安全测试 发布:2025-07-13 21:54:29 浏览:39
python打开应用程序 发布:2025-07-13 21:46:09 浏览:523
怎么配置电视机 发布:2025-07-13 21:34:24 浏览:975
androidapp安装时间 发布:2025-07-13 21:09:27 浏览:487