导航:首页 > 文档加密 > 矩阵数据如何加密

矩阵数据如何加密

发布时间:2024-11-01 17:24:33

A. 常用的加密算法有哪些

对称密钥加密

对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。

B. 如何使用java对密码加密 加密方式aes

Java有相关的实现类:具体原理如下
对于任意长度的明文,AES首先对其进行分组,每组的长度为128位。分组之后将分别对每个128位的明文分组进行加密。
对于每个128位长度的明文分组的加密过程如下:
(1)将128位AES明文分组放入状态矩阵中。
(2)AddRoundKey变换:对状态矩阵进行AddRoundKey变换,与膨胀后的密钥进行异或操作(密钥膨胀将在实验原理七中详细讨论)。
(3)10轮循环:AES对状态矩阵进行了10轮类似的子加密过程。前9轮子加密过程中,每一轮子加密过程包括4种不同的变换,而最后一轮只有3种变换,前9轮的子加密步骤如下:
● SubBytes变换:SubBytes变换是一个对状态矩阵非线性的变换;
● ShiftRows变换:ShiftRows变换对状态矩阵的行进行循环移位;
● MixColumns变换:MixColumns变换对状态矩阵的列进行变换;
● AddRoundKey变换:AddRoundKey变换对状态矩阵和膨胀后的密钥进行异或操作。
最后一轮的子加密步骤如下:
● SubBytes变换:SubBytes变换是一个对状态矩阵非线性的变换;
● ShiftRows变换:ShiftRows变换对状态矩阵的行进行循环移位;
● AddRoundKey变换:AddRoundKey变换对状态矩阵和膨胀后的密钥进行异或操作;
(4)经过10轮循环的状态矩阵中的内容就是加密后的密文。
AES的加密算法的伪代码如下。

在AES算法中,AddRoundKey变换需要使用膨胀后的密钥,原始的128位密钥经过膨胀会产生44个字(每个字为32位)的膨胀后的密钥,这44个字的膨胀后的密钥供11次AddRoundKey变换使用,一次AddRoundKey使用4个字(128位)的膨胀后的密钥。
三.AES的分组过程
对于任意长度的明文,AES首先对其进行分组,分组的方法与DES相同,即对长度不足的明文分组后面补充0即可,只是每一组的长度为128位。
AES的密钥长度有128比特,192比特和256比特三种标准,其他长度的密钥并没有列入到AES联邦标准中,在下面的介绍中,我们将以128位密钥为例。
四.状态矩阵
状态矩阵是一个4行、4列的字节矩阵,所谓字节矩阵就是指矩阵中的每个元素都是一个1字节长度的数据。我们将状态矩阵记为State,State中的元素记为Sij,表示状态矩阵中第i行第j列的元素。128比特的明文分组按字节分成16块,第一块记为“块0”,第二块记为“块1”,依此类推,最后一块记为“块15”,然后将这16块明文数据放入到状态矩阵中,将这16块明文数据放入到状态矩阵中的方法如图2-2-1所示。

块0

块4

块8

块12

块1

块5

块9

块13

块2

块6

块10

块14

块3

块7

块11

块15

图2-2-1 将明文块放入状态矩阵中
五.AddRoundKey变换
状态矩阵生成以后,首先要进行AddRoundKey变换,AddRoundKey变换将状态矩阵与膨胀后的密钥进行按位异或运算,如下所示。

其中,c表示列数,数组W为膨胀后的密钥,round为加密轮数,Nb为状态矩阵的列数。
它的过程如图2-2-2所示。

图2-2-2 AES算法AddRoundKey变换
六.10轮循环
经过AddRoundKey的状态矩阵要继续进行10轮类似的子加密过程。前9轮子加密过程中,每一轮要经过4种不同的变换,即SubBytes变换、ShiftRows变换、MixColumns变换和AddRoundKey变换,而最后一轮只有3种变换,即SubBytes变换、ShiftRows变换和AddRoundKey变换。AddRoundKey变换已经讨论过,下面分别讨论余下的三种变换。
1.SubBytes变换
SubBytes是一个独立作用于状态字节的非线性变换,它由以下两个步骤组成:
(1)在GF(28)域,求乘法的逆运算,即对于α∈GF(28)求β∈GF(28),使αβ =βα = 1mod(x8 + x4 + x3 + x + 1)。
(2)在GF(28)域做变换,变换使用矩阵乘法,如下所示:

由于所有的运算都在GF(28)域上进行,所以最后的结果都在GF(28)上。若g∈GF(28)是GF(28)的本原元素,则对于α∈GF(28),α≠0,则存在
β ∈ GF(28),使得:
β = gαmod(x8 + x4 + x3 + x + 1)
由于g255 = 1mod(x8 + x4 + x3 + x + 1)
所以g255-α = β-1mod(x8 + x4 + x3 + x + 1)
根据SubBytes变换算法,可以得出SubBytes的置换表,如表2-2-1所示,这个表也叫做AES的S盒。该表的使用方法如下:状态矩阵中每个元素都要经过该表替换,每个元素为8比特,前4比特决定了行号,后4比特决定了列号,例如求SubBytes(0C)查表的0行C列得FE。
表2-2-1 AES的SubBytes置换表

它的变换过程如图2-2-3所示。

图2-2-3 SubBytes变换
AES加密过程需要用到一些数学基础,其中包括GF(2)域上的多项式、GF(28)域上的多项式的计算和矩阵乘法运算等,有兴趣的同学请参考相关的数学书籍。
2.ShiftRows变换
ShiftRows变换比较简单,状态矩阵的第1行不发生改变,第2行循环左移1字节,第3行循环左移2字节,第4行循环左移3字节。ShiftRows变换的过程如图2-2-4所示。

图2-2-4 AES的ShiftRows变换
3.MixColumns变换
在MixColumns变换中,状态矩阵的列看作是域GF(28)的多项式,模(x4+1)乘以c(x)的结果:
c(x)=(03)x3+(01)x2+(01)x+(02)
这里(03)为十六进制表示,依此类推。c(x)与x4+1互质,故存在逆:
d(x)=(0B)x3+(0D)x2+(0G)x+(0E)使c(x)•d(x) = (D1)mod(x4+1)。
设有:

它的过程如图2-2-5所示。

图2-2-5 AES算法MixColumns变换
七.密钥膨胀
在AES算法中,AddRoundKey变换需要使用膨胀后的密钥,膨胀后的密钥记为子密钥,原始的128位密钥经过膨胀会产生44个字(每个字为32位)的子密钥,这44个字的子密钥供11次AddRoundKey变换使用,一次AddRoundKey使用4个字(128位)的膨胀后的密钥。
密钥膨胀算法是以字为基础的(一个字由4个字节组成,即32比特)。128比特的原始密钥经过膨胀后将产生44个字的子密钥,我们将这44个密钥保存在一个字数组中,记为W[44]。128比特的原始密钥分成16份,存放在一个字节的数组:Key[0],Key[1]……Key[15]中。
在密钥膨胀算法中,Rcon是一个10个字的数组,在数组中保存着算法定义的常数,分别为:
Rcon[0] = 0x01000000
Rcon[1] = 0x02000000
Rcon[2] = 0x04000000
Rcon[3] = 0x08000000
Rcon[4] = 0x10000000
Rcon[5] = 0x20000000
Rcon[6] = 0x40000000
Rcon[7] = 0x80000000
Rcon[8] = 0x1b000000
Rcon[9] = 0x36000000
另外,在密钥膨胀中包括其他两个操作RotWord和SubWord,下面对这两个操作做说明:
RotWord( B0,B1,B2,B3 )对4个字节B0,B1,B2,B3进行循环移位,即
RotWord( B0,B1,B2,B3 ) = ( B1,B2,B3,B0 )
SubWord( B0,B1,B2,B3 )对4个字节B0,B1,B2,B3使用AES的S盒,即
SubWord( B0,B1,B2,B3 ) = ( B’0,B’1,B’2,B’3 )
其中,B’i = SubBytes(Bi),i = 0,1,2,3。
密钥膨胀的算法如下:

八.解密过程
AES的加密和解密过程并不相同,首先密文按128位分组,分组方法和加密时的分组方法相同,然后进行轮变换。
AES的解密过程可以看成是加密过程的逆过程,它也由10轮循环组成,每一轮循环包括四个变换分别为InvShiftRows变换、InvSubBytes变换、InvMixColumns变换和AddRoundKey变换;
这个过程可以描述为如下代码片段所示:

九.InvShiftRows变换
InvShiftRows变换是ShiftRows变换的逆过程,十分简单,指定InvShiftRows的变换如下。
Sr,(c+shift(r,Nb))modNb= Sr,c for 0 < r< 4 and 0 ≤ c < Nb
图2-2-6演示了这个过程。

图2-2-6 AES算法InvShiftRows变换
十.InvSubBytes变换
InvSubBytes变换是SubBytes变换的逆变换,利用AES的S盒的逆作字节置换,表2-2-2为InvSubBytes变换的置换表。
表2-2-2 InvSubBytes置换表

十一.InvMixColumns变换
InvMixColumns变换与MixColumns变换类似,每列乘以d(x)
d(x) = (OB)x3 + (0D)x2 + (0G)x + (0E)
下列等式成立:
( (03)x3 + (01)x2 + (01)x + (02) )⊙d(x) = (01)
上面的内容可以描述为以下的矩阵乘法:

十二.AddRoundKey变换
AES解密过程的AddRoundKey变换与加密过程中的AddRoundKey变换一样,都是按位与子密钥做异或操作。解密过程的密钥膨胀算法也与加密的密钥膨胀算法相同。最后状态矩阵中的数据就是明文。

C. AES128锷犺В瀵嗘祦绋嬭︾粏浠嬬粛


AES128锷犲瘑/瑙e瘑娴佺▼娣卞害瑙f瀽


锷犲瘑杩囩▼: AES128镄勫姞瀵嗕箣镞呭嬩簬16瀛楄妭镄勫师濮嬫暟鎹鍜16瀛楄妭镄勫瘑阍ワ纴棣栧厛灏嗕袱钥呰瀺钖埚埌涓涓鎺掑垪鐭╅樀涓銆傛帴镌锛岄氲繃杞瀵嗛挜锷狅纸寮傛垨锛夋搷浣滐纴閰嶅悎瀛楄妭浠f浛锛圫鐩掞级镄勯瓟链锛岃岀Щ浣崭笌鍒楁贩娣嗭纸锲哄畾鐭╅樀锛夌殑宸у欑粍钖堬纴杩涜10杞杩浠c傛渶钖庯纴阃氲繃镓╁𪾢瀵嗛挜锛𪢮鐭╅樀镎崭綔锛夌敓鎴愪竴涓鍏抽敭妗ユ侊纴纭淇濇暟鎹镄勫畨鍏ㄨ浆绉汇


锷犲瘑姝ラよ﹁В锛


  1. 杞瀵嗛挜锷狅细 4x4瀵嗘枃鍗曞厓涓庢墿灞曞瘑阍ョ殑链4瀛楄妭杩涜岃瀺钖堛

  2. 琛岀Щ浣嶏纸锷犲瘑涓庤В瀵嗙浉鍙嶏级锛 涓庡姞瀵嗘椂镄勬ラょ浉鍙嶏纴纭淇濊В瀵嗙殑姝g‘杩桦师銆

  3. 瀛楄妭浠f浛锛堥嗗悜S鐩掞级锛 閲囩敤阃嗗悜S鐩掑彉鎹锛岀簿缁呜皟鏁寸烦阒靛厓绱犮

  4. 杞瀵嗛挜锷狅纸閲嶅嶏级锛 4杞钖庯纴鍐崭笌镓╁𪾢瀵嗛挜镄勫叾浣欓儴鍒呜繘琛屽姞娉曡繍绠椼

  5. 绗10杞锛 瀵嗘枃鐢熸垚锛屾渶钖庝竴杞涓嶆贩娣嗭纴淇濈暀铡熷嬩俊鎭镄勫畬鏁存с


瑙e瘑姝ラわ细 涓庡姞瀵嗙浉鍙嶏纴鐢10杞杞瀵嗛挜锷狅纴姣忔′娇鐢ㄦ墿灞曞瘑阍ワ纴纭淇濊缮铡熷姞瀵嗘椂镄勬疮涓姝ャ傝В瀵嗘椂锛岃В瀵嗘槑鏂囧湪10杞钖庢彮鏅掳纴涓斿湪链钖庝竴杞镞讹纴鍒楁贩娣嗙殑镎崭綔闇璋冩暣涓洪嗗悜澶勭悊銆


瀹为檯搴旂敤锛 瀵逛簬鏂囦欢锷犲瘑锛岄櫎浜嗗熀纭镄勭数瀛愬瘑镰佹湰锛圗CB锛夛纴鎴戜滑杩樻湁鍏朵粬瀹夊叏阃夐”銆侲CB铏界劧绠鍗曪纴浣嗘槗𨱌撮湶閲嶅嶆ā寮忥纴闇璋ㄦ厧浣跨敤銆傚瘑镰佸潡阈炬帴锛圕BC锛夐氲繃鍒濆嫔悜閲忛伩鍏嶆ā寮忛梾棰桡纴鏀鎸佸苟琛岃В瀵嗭纴浣呜В瀵嗘椂瀵归敊璇鏁忔劅銆傚瘑鏂囧弽棣堬纸CFB锛変互bit涓哄崟浣嶏纴鎻愪緵棰濆栫殑瀹夊叏灞傦纴浣呜В瀵嗘椂链夐吨鏀炬敾鍑婚庨橹銆


妯″纺璇﹁В锛


鍦ㄦ枃浠跺垎鍧楁椂锛屽彲鑳戒细鐢ㄥ埌濉鍏呮満鍒讹纴濡侼oPadding銆丳KCS#7銆乑erosPadding绛夛纴浠ユ弧瓒虫暟鎹瀹屾暣镐с傚悗缁绔犺妭灏嗘繁鍏ユ帰璁ㄨ繖浜涙妧链浠ュ强鍙鑳界殑鏀诲嚮镰磋В绛栫暐銆


D. 四方密码加密方法

四方密码是一种对称式加密法,由法国人Felix Delastelle(1840年–1902年)发明。

这种方法将字母两个一组,然后采用多字母替换密码。

四方密码用4个5×5的矩阵来加密。每个矩阵都有25个字母(通常会取消Q或将I,J视作同一样,或改进为6×6的矩阵,加入10个数字)。

首先选择两个英文字作密匙,例如example和keyword。对于每一个密匙,将重复出现的字母去除,即example要转成exampl,然后将每个字母顺序放入矩阵,再将余下的字母顺序放入矩阵,便得出加密矩阵。

将这两个加密矩阵放在左上角和右下角,余下的两个角放a到z顺序的矩阵:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z

K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
加密的步骤:

两个字母一组地分开讯息:(例如hello world变成he ll ow or ld)
找出第一个字母在左上角矩阵的位置
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
同样道理,找第二个字母在右下角矩阵的位置:

a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找右上角矩阵中,和第一个字母同行,第二个字母同列的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z

找左下角矩阵中,和第一个字母同列,第二个字母同行的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
这两个字母就是加密过的讯息。

hello world的加密结果:

he lp me ob iw an ke no bi
FY GM KY HO BX MF KK KI MD
[编辑]二方密码
二方密码(en:Two-square_cipher)比四方密码用更少的矩阵。

得出加密矩阵的方法和四方密码一样。

例如用“example”和“keyword”作密匙,加密lp。首先找出第一个字母(L)在上方矩阵的位置,再找出第二个字母(D)在下方矩阵的位置:

E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z

K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
在上方矩阵找第一个字母同行,第二个字母同列的字母;在下方矩阵找第一个字母同列,第二个字母同行的字母,那两个字母就是加密的结果:

E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z

K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
help me的加密结果:

he lp me
HE DL XW
这种加密法的弱点是若两个字同列,便采用原来的字母,例如he便加密作HE。约有二成的内容都因此而暴露

E. 请用矩阵变位法将明文:”computer ”加密,并写出其密文。 密钥: 3×3矩阵,置换: f=((123) (312))

楼主你好~~

密钥为3*3矩阵,置换为f=((1,2,3),(3,1,2)),也就是说将明1列->密3列,明2列->密1列,明3列->密2列。

我们分步进行
1)构造3x3矩阵:

| 1 | 2 | 3 |

| _ | _ | _ |
| _ | _ | _ |
| _ | _ | _ |

2)填入明文:
| 1 | 2 | 3 |

| _ | C | O | <-注意第一个有一个空格
| M | P | U |
| T | E | R |

3)矩阵变位,置换为f=((1,2,3),(3,1,2)):

| 3 | 1 | 2 |

| O | _ | C |

| U | M | P |
| R | T | E |

4)输出密文:
o_cumprte <- 注意_就是空格

其实矩阵变位本质是周期性改变明文段排列的加密方法,属于古典加密中的置换移位加密,这一类中最着名的是维吉尼亚加密法,古典加密还有个分类是替代加密,例如凯撒加密法,古典加密都属于对称加密,都禁受不住字典攻击。

阅读全文

与矩阵数据如何加密相关的资料

热点内容
宋pro的app哪里下载 浏览:201
单片机原理与接口技术第三版课后答案 浏览:888
程序员小明教学 浏览:611
linuxbin解压缩 浏览:382
四川电信服务器租用云空间 浏览:31
我的世界服务器内存大怎么办 浏览:388
互联网与服务器链接不成功怎么办 浏览:645
python拆分数组 浏览:83
虚机服务器怎么增加D盘的空间 浏览:502
程序员搬运 浏览:65
手机app的视频存在哪里了 浏览:280
程序员几年会淘汰 浏览:739
调试助手查询sim卡命令 浏览:441
催眠程序员 浏览:776
python中3怎样 浏览:106
米10安卓11怎么升安卓12 浏览:349
安卓屏幕模式有什么用 浏览:203
iphone换魅族安卓如何转移数据 浏览:777
linux安装命令rpm 浏览:328
太原方特app哪里下载 浏览:709