谁能提供下java中有关加密和解密的代码public static void main(String[] args) throws Exception {
String data = "https://www.04ip.com/post/itxxz";
System.out.println("字符串java中登录时加密代码:itxxz");
System.err.println("加密java中登录时加密代码:" encrypt(data));
System.err.println("解密:" decrypt(encrypt(data)));
}
运行结果:
由于代码太多java中登录时加密代码,可到itxxz.com/a/javashili/2014/1217/encrypt_decrypt.html查看java中登录时加密代码,注释也比较完整java中登录时加密代码 , 清晰易懂
用java做的登录框 怎么给密码加密?jdk 里面有个MessageDigest是实现md5加密的方法 你把用户输入的密码经过这个类进行md5加密 别人就不知道密码了 然后每次用户登陆 他输入的密码都要都用这个方法转换成md5串 进行匹配 就没人知道密码是什么了 这有个小例子 你可以看一下 package test;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5 {
public String str; public void transFormMD5(String text) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(text.getBytes());
byte b[] = md.digest();
int x;StringBuffer buf = new StringBuffer("");
for (int i = 0; ib.length; i) {
x = b[i];
if (x0)
x= 256;
if (x16)
buf.append("0");
buf.append(Integer.toHexString(x));
}
str = buf.toString();
System.out.println("32位加密后的字符串: "buf.toString());// 32位的加密
System.out.println("16位加密后的字符串: "buf.toString().substring(8, 24));// 16位的加密
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();}
} public static void main(String agrs[]) {
MD5 tm = new MD5();
tm.transFormMD5("password");//进行转换
}}
JAVA中密码登陆代码怎么写看一下apache httpclientjava中登录时加密代码的包java中登录时加密代码,现成java中登录时加密代码的代码
JAVA怎么将用户登录的密码加密你可以选择用MD5,将密码转成另外一个字符串加密,也可以自己写一个加密的算法 。
如何使用java对密码加密 加密方式aesJava有相关的实现类:具体原理如下
对于任意长度的明文java中登录时加密代码 , AES首先对其进行分组java中登录时加密代码,每组的长度为128位 。分组之后将分别对每个128位的明文分组进行加密 。
对于每个128位长度的明文分组的加密过程如下:
(1)将128位AES明文分组放入状态矩阵中 。
(2)AddRoundKey变换:对状态矩阵进行AddRoundKey变换 , 与膨胀后的密钥进行异或操作(密钥膨胀将在实验原理七中详细讨论) 。
(3)10轮循环:AES对状态矩阵进行了10轮类似的子加密过程 。前9轮子加密过程中,每一轮子加密过程包括4种不同的变换,而最后一轮只有3种变换,前9轮的子加密步骤如下:
●SubBytes变换:SubBytes变换是一个对状态矩阵非线性的变换java中登录时加密代码;
●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比特三种标准,其java中登录时加密代码他长度的密钥并没有列入到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-2AES算法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(x8x4x3x1) 。
(2)在GF(28)域做变换,变换使用矩阵乘法 , 如下所示:
由于所有的运算都在GF(28)域上进行,所以最后的结果都在GF(28)上 。若g∈GF(28)是GF(28)的本原元素,则对于α∈GF(28) , α≠0,则存在
β ∈ GF(28),使得:
β = gαmod(x8x4x3x1)
由于g255 = 1mod(x8x4x3x1)
所以g255-α = β-1mod(x8x4x3x1)
根据SubBytes变换算法,可以得出SubBytes的置换表,如表2-2-1所示,这个表也叫做AES的S盒 。该表的使用方法如下:状态矩阵中每个元素都要经过该表替换,每个元素为8比特,前4比特决定了行号,后4比特决定了列号,例如求SubBytes(0C)查表的0行C列得FE 。
表2-2-1AES的SubBytes置换表
它的变换过程如图2-2-3所示 。
图2-2-3SubBytes变换
AES加密过程需要用到一些数学基础,其中包括GF(2)域上的多项式、GF(28)域上的多项式的计算和矩阵乘法运算等,有兴趣的同学请参考相关的数学书籍 。
2.ShiftRows变换
ShiftRows变换比较简单,状态矩阵的第1行不发生改变,第2行循环左移1字节,第3行循环左移2字节,第4行循环左移3字节 。ShiftRows变换的过程如图2-2-4所示 。
【java中登录时加密代码 java密码加密哪种方式最安全】图2-2-4AES的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-5AES算法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 0r 4 and 0 ≤ cNb
图2-2-6演示了这个过程 。
图2-2-6AES算法InvShiftRows变换
十.InvSubBytes变换
InvSubBytes变换是SubBytes变换的逆变换,利用AES的S盒的逆作字节置换,表2-2-2为InvSubBytes变换的置换表 。
表2-2-2InvSubBytes置换表
十一.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变换一样,都是按位与子密钥做异或操作 。解密过程的密钥膨胀算法也与加密的密钥膨胀算法相同 。最后状态矩阵中的数据就是明文 。
java中登录时加密代码的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于java密码加密哪种方式最安全、java中登录时加密代码的信息别忘了在本站进行查找喔 。
推荐阅读
- 如何营销人员,怎么做好一个营销人员
- xbox动作游戏,xbox动作游戏太少了
- html5手机长按,h5 长按
- vb和vb.net的区别 vbnet vb60区别
- 本田竞瑞怎么连接u盘,本田竞瑞怎么连蓝牙放音乐
- 株洲学营销策划如何,学营销策划读什么专业
- 瓯北项目代理会计平台,瓯北项目代理会计平台有哪些
- mysql怎么看分区删了没 mysql查看分区是否存在
- ChatGPT4国内镜像网址的简单介绍