java怎么对语句加密(java语句)

  • 时间:
  • 浏览:3
  • 来源:java教程网
问答列表
6条问答


1.java语言实现密码加密

一般只有加密码过程,没有解密。用户登陆时,把他输入的密码经过加密再拿去与数据库里面的密码比较就可以了。修改密码也是一样的原理,输入的原密码加密后与数据库密码比较,符合的话再将新密码加密后存入数据库覆盖原密码现在流行的MD5加密算法 网上有很多JAVA的MD5算法


2.java加密的几种方式

基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法MD5(Message Digest algorithm 5,信息摘要算法)SHA(Secure Hash Algorithm,安全散列算法)HMAC(Hash Message Authentication Code,散列消息鉴别码)复杂的对称加密DES、PBE、非对称加密算法: DES(Data Encryption Standard,数据加密算法)PBE(Password~based encryption,基于密码验证)RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)DH(Diffie~Hellman算法,密钥一致协议)DSA(Digital Signature Algorithm,数字签名)ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)代码参考:/** * BASE64加密 * * @param key * @return * @throws Exception */ public static String encryptBASE64(byte key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } /** * MD5加密 * * @param data * @return * @throws Exception */ public static byte encryptMD5(byte data) throws Exception { MessageDigest md5 = MessageDigest.getInstance(KEY_MD5); md

5.update(data); return md

5.digest(); } /** * SHA加密 * * @param data * @return * @throws Exception */ public static byte encryptSHA(byte data) throws Exception { MessageDigest sha = MessageDigest.getInstance(KEY_SHA); sha.update(data); return sha.digest(); } } /** * 初始化HMAC密钥 * * @return * @throws Exception */ public static String initMacKey() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return encryptBASE64(secretKey.getEncoded()); } /** * HMAC加密 * * @param data * @param key * @return * @throws Exception */ public static byte encryptHMAC(byte data, String key) throws Exception { SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return mac.doFinal(data); }


3.Java中怎么把密码加密!

MD5很简单,有专门的类,自己定义一个加密用的saltKey。还有自己写简单的加密解密可以用异或算法,一个字符串于某字符异或就加密了,再与这个字符异或又解密了。很简单的算法。不过比较容易破解


4.java如何对字符串进行加密

如果使用了数据库的话可以采用MD5进行加密,若只是本地数据就直接建立一个独立公共类进行字符转换。


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

Java有相关的实现类:具体原理如下对于任意长度的明文,AES首先对其进行分组,每组的长度为128位。
分组之后将分别对每个128位的明文分组进行加密。对于每个128位长度的明文分组的加密过程如下:1将128位AES明文分组放入状态矩阵中。2AddRoundKey变换:对状态矩阵进行AddRoundKey变换,与膨胀后的密钥进行异或操作密钥膨胀将在实验原理七中详细讨论。
310轮循环: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在GF28域,求乘法的逆运算,即对于α∈GF28求β∈GF28,使αβ =βα = 1modx8 x4 x3 x 1。
2在GF28域做变换,变换使用矩阵乘法,如下所示:由于所有的运算都在GF28域上进行,所以最后的结果都在GF28上。
若g∈GF28是GF28的本原元素,则对于α∈GF28,α≠0,则存在β ∈ GF28,使得:β = gαmodx8 x4 x3 x 1由于g255 = 1modx8 x4 x3 x 1所以g255~α = β~1modx8 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)域上的多项式、GF28域上的多项式的计算和矩阵乘法运算等,有兴趣的同学请参考相关的数学书籍。
2.ShiftRows变换ShiftRows变换比较简单,状态矩阵的第1行不发生改变,第2行循环左移1字节,第3行循环左移2字节,第4行循环左移3字节。
ShiftRows变换的过程如图2~2~4所示。图2~2~4 AES的ShiftRows变换3.MixColumns变换在MixColumns变换中,状态矩阵的列看作是域GF28的多项式,模(x4+1)乘以cx的结果: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。128比特的原始密钥分成16份,存放在一个字节的数组:Key,Key……Key中。在密钥膨胀算法中,Rcon是一个10个字的数组,在数组中保存着算法定义的常数,分别为:Rcon = 0x01000000Rcon = 0x02000000Rcon = 0x04000000Rcon = 0x08000000Rcon = 0x10000000Rcon = 0x20000000Rcon = 0x40000000Rcon = 0x80000000Rcon = 0x1b000000Rcon = 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 = SubBytesBi,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变换一样,都是按位与子密钥做异或操作。
解密过程的密钥膨胀算法也与加密的密钥膨胀算法相同。最后状态矩阵中的数据就是明文。


6.怎么用java对数据进行加密解密

使用MD5加密解密法。这是目前最常用,也是最好用的方法。这种方法不止对java有用,对很多语言都通用。你上网查一下嘛。一大把

猜你喜欢

java怎么解密md5

问答列表1.JavaMD5如何解密2.java中如何进行md5加密3.java怎么把字符串进行md5加密4.求Java的MD5加密解密实现类。要实现对用户的密码进行加密!然后验

2021-04-16

Java怎么用io流(Java web)

问答列表1.javaio流的典型使用方式有几种2.java中怎样用IO流把一个文件全部读取出来3.java中的io流,怎么运行4.java中什么是IO流5.求解:JAVA中怎么

2021-04-16

Java怎么打印到界面(网页打印不了怎么设置)

问答列表1.java怎么打印出JFrame界面就是我写出一个界面,现在想把它打印出来怎么写代码2.java里如何用输出窗口打印内容3.java调用打印机,把GUI界面里的内容打

2021-04-16

怎么查询java版本(java哪个版本好)

问答列表1.怎么查看java的版本号2.如何查看jdk版本3.怎么查看JAVAJDK版本4.如何看本机JDK详细版本5.如何查看jdk的版本是32位还是64位6.如何查看ecl

2021-04-16

怎么高并发 java(java高并发原理)

问答列表1.java怎样处理高并发2.java中怎么实现高并发3.java如何处理高并发4.java高并发,如何解决,什么方式解决,高并发5.JAVA中怎么处理高并发的情况6.

2021-04-16