用java做的登录框 怎么给密码加密?

用java做的登录框 怎么给密码加密?,第1张

jdk 里面有个MessageDigest是实现md5加密的方法 你把用户输入的密码经过这个类进行md5加密 别人就不知道密码了 然后每次用户登陆 他输入的密码都要都用这个方法转换成md5串 进行匹配 就没人知道密码是什么了 这有个小例子 你可以看一下 package test;import javasecurityMessageDigest;

import javasecurityNoSuchAlgorithmException;public class MD5 {

public String str; public void transFormMD5(String text) {

try {

MessageDigest md = MessageDigestgetInstance("MD5");

mdupdate(textgetBytes());

byte b[] = mddigest();

int x; StringBuffer buf = new StringBuffer("");

for (int i = 0; i < blength; i++) {

x = b[i];

if (x < 0)

x += 256;

if (x < 16)

bufappend("0");

bufappend(IntegertoHexString(x));

}

str = buftoString();

Systemoutprintln("32位加密后的字符串: " + buftoString());// 32位的加密

Systemoutprintln("16位加密后的字符串: " + buftoString()substring(8, 24));// 16位的加密

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

eprintStackTrace(); }

} public static void main(String agrs[]) {

MD5 tm = new MD5();

tmtransFormMD5("password");//进行转换

}}

java加密字符串可以使用des加密算法,实例如下:

package test;

import javaioFileInputStream;

import javaioFileOutputStream;

import javaioIOException;

import javaioObjectInputStream;

import javaioObjectOutputStream;

import javasecurity;

import javaxcryptoCipher;

import javaxcryptoKeyGenerator;

import javaxcryptoSecretKey;

/

加密解密

@author shyqiu

@since

/

public class CryptTest {

/

进行MD5加密

@param info

要加密的信息

@return String 加密后的字符串

/

public String encryptToMD5(String info) {

byte[] digesta = null;

try {

// 得到一个md5的消息摘要

MessageDigest alga = MessageDigestgetInstance("MD5");

// 添加要进行计算摘要的信息

algaupdate(infogetBytes());

// 得到该摘要

digesta = algadigest();

} catch (NoSuchAlgorithmException e) {

eprintStackTrace();

}

// 将摘要转为字符串

String rs = byte2hex(digesta);

return rs;

}

/

进行SHA加密

@param info

要加密的信息

@return String 加密后的字符串

/

public String encryptToSHA(String info) {

byte[] digesta = null;

try {

// 得到一个SHA-1的消息摘要

MessageDigest alga = MessageDigestgetInstance("SHA-1");

// 添加要进行计算摘要的信息

algaupdate(infogetBytes());

// 得到该摘要

digesta = algadigest();

} catch (NoSuchAlgorithmException e) {

eprintStackTrace();

}

// 将摘要转为字符串

String rs = byte2hex(digesta);

return rs;

}

// //////////////////////////////////////////////////////////////////////////

/

创建密匙

@param algorithm

加密算法,可用 DES,DESede,Blowfish

@return SecretKey 秘密(对称)密钥

/

public SecretKey createSecretKey(String algorithm) {

// 声明KeyGenerator对象

KeyGenerator keygen;

// 声明 密钥对象

SecretKey deskey = null;

try {

// 返回生成指定算法的秘密密钥的 KeyGenerator 对象

keygen = KeyGeneratorgetInstance(algorithm);

// 生成一个密钥

deskey = keygengenerateKey();

} catch (NoSuchAlgorithmException e) {

eprintStackTrace();

}

// 返回密匙

return deskey;

}

/

根据密匙进行DES加密

@param key

密匙

@param info

要加密的信息

@return String 加密后的信息

/

public String encryptToDES(SecretKey key, String info) {

// 定义 加密算法,可用 DES,DESede,Blowfish

String Algorithm = "DES";

// 加密随机数生成器 (RNG),(可以不写)

SecureRandom sr = new SecureRandom();

// 定义要生成的密文

byte[] cipherByte = null;

try {

// 得到加密/解密器

Cipher c1 = CiphergetInstance(Algorithm);

// 用指定的密钥和模式初始化Cipher对象

// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)

c1init(CipherENCRYPT_MODE, key, sr);

// 对要加密的内容进行编码处理,

cipherByte = c1doFinal(infogetBytes());

} catch (Exception e) {

eprintStackTrace();

}

// 返回密文的十六进制形式

return byte2hex(cipherByte);

}

/

根据密匙进行DES解密

@param key

密匙

@param sInfo

要解密的密文

@return String 返回解密后信息

/

public String decryptByDES(SecretKey key, String sInfo) {

// 定义 加密算法,

String Algorithm = "DES";

// 加密随机数生成器 (RNG)

SecureRandom sr = new SecureRandom();

byte[] cipherByte = null;

try {

// 得到加密/解密器

Cipher c1 = CiphergetInstance(Algorithm);

// 用指定的密钥和模式初始化Cipher对象

c1init(CipherDECRYPT_MODE, key, sr);

// 对要解密的内容进行编码处理

cipherByte = c1doFinal(hex2byte(sInfo));

} catch (Exception e) {

eprintStackTrace();

}

// return byte2hex(cipherByte);

return new String(cipherByte);

}

// /////////////////////////////////////////////////////////////////////////////

/

创建密匙组,并将公匙,私匙放入到指定文件中

默认放入mykeysbat文件中

/

public void createPairKey() {

try {

// 根据特定的算法一个密钥对生成器

KeyPairGenerator keygen = KeyPairGeneratorgetInstance("DSA");

// 加密随机数生成器 (RNG)

SecureRandom random = new SecureRandom();

// 重新设置此随机对象的种子

randomsetSeed(1000);

// 使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器

keygeninitialize(512, random);// keygeninitialize(512);

// 生成密钥组

KeyPair keys = keygengenerateKeyPair();

// 得到公匙

PublicKey pubkey = keysgetPublic();

// 得到私匙

PrivateKey prikey = keysgetPrivate();

// 将公匙私匙写入到文件当中

doObjToFile("mykeysbat", new Object[] { prikey, pubkey });

} catch (NoSuchAlgorithmException e) {

eprintStackTrace();

}

}

/

利用私匙对信息进行签名 把签名后的信息放入到指定的文件中

@param info

要签名的信息

@param signfile

存入的文件

/

public void signToInfo(String info, String signfile) {

// 从文件当中读取私匙

PrivateKey myprikey = (PrivateKey) getObjFromFile("mykeysbat", 1);

// 从文件中读取公匙

PublicKey mypubkey = (PublicKey) getObjFromFile("mykeysbat", 2);

try {

// Signature 对象可用来生成和验证数字签名

Signature signet = SignaturegetInstance("DSA");

// 初始化签署签名的私钥

signetinitSign(myprikey);

// 更新要由字节签名或验证的数据

signetupdate(infogetBytes());

// 签署或验证所有更新字节的签名,返回签名

byte[] signed = signetsign();

// 将数字签名,公匙,信息放入文件中

doObjToFile(signfile, new Object[] { signed, mypubkey, info });

} catch (Exception e) {

eprintStackTrace();

}

}

/

读取数字签名文件 根据公匙,签名,信息验证信息的合法性

@return true 验证成功 false 验证失败

/

public boolean validateSign(String signfile) {

// 读取公匙

PublicKey mypubkey = (PublicKey) getObjFromFile(signfile, 2);

// 读取签名

byte[] signed = (byte[]) getObjFromFile(signfile, 1);

// 读取信息

String info = (String) getObjFromFile(signfile, 3);

try {

// 初始一个Signature对象,并用公钥和签名进行验证

Signature signetcheck = SignaturegetInstance("DSA");

// 初始化验证签名的公钥

signetcheckinitVerify(mypubkey);

// 使用指定的 byte 数组更新要签名或验证的数据

signetcheckupdate(infogetBytes());

Systemoutprintln(info);

// 验证传入的签名

return signetcheckverify(signed);

} catch (Exception e) {

eprintStackTrace();

return false;

}

}

/

将二进制转化为16进制字符串

@param b

二进制字节数组

@return String

/

public String byte2hex(byte[] b) {

String hs = "";

String stmp = "";

for (int n = 0; n < blength; n++) {

stmp = (javalangIntegertoHexString(b[n] & 0XFF));

if (stmplength() == 1) {

hs = hs + "0" + stmp;

} else {

hs = hs + stmp;

}

}

return hstoUpperCase();

}

/

十六进制字符串转化为2进制

@param hex

@return

/

public byte[] hex2byte(String hex) {

byte[] ret = new byte[8];

byte[] tmp = hexgetBytes();

for (int i = 0; i < 8; i++) {

ret[i] = uniteBytes(tmp[i 2], tmp[i 2 + 1]);

}

return ret;

}

/

将两个ASCII字符合成一个字节; 如:"EF"--> 0xEF

@param src0

byte

@param src1

byte

@return byte

/

public static byte uniteBytes(byte src0, byte src1) {

byte _b0 = Bytedecode("0x" + new String(new byte[] { src0 }))

byteValue();

_b0 = (byte) (_b0 << 4);

byte _b1 = Bytedecode("0x" + new String(new byte[] { src1 }))

byteValue();

byte ret = (byte) (_b0 ^ _b1);

return ret;

}

/

将指定的对象写入指定的文件

@param file

指定写入的文件

@param objs

要写入的对象

/

public void doObjToFile(String file, Object[] objs) {

ObjectOutputStream oos = null;

try {

FileOutputStream fos = new FileOutputStream(file);

oos = new ObjectOutputStream(fos);

for (int i = 0; i < objslength; i++) {

ooswriteObject(objs[i]);

}

} catch (Exception e) {

eprintStackTrace();

} finally {

try {

oosclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

/

返回在文件中指定位置的对象

@param file

指定的文件

@param i

从1开始

@return

/

public Object getObjFromFile(String file, int i) {

ObjectInputStream ois = null;

Object obj = null;

try {

FileInputStream fis = new FileInputStream(file);

ois = new ObjectInputStream(fis);

for (int j = 0; j < i; j++) {

obj = oisreadObject();

}

} catch (Exception e) {

eprintStackTrace();

} finally {

try {

oisclose();

} catch (IOException e) {

eprintStackTrace();

}

}

return obj;

}

/

测试

@param args

/

public static void main(String[] args) {

CryptTest jiami = new CryptTest();

// 执行MD5加密"Hello world!"

Systemoutprintln("Hello经过MD5:" + jiamiencryptToMD5("Hello"));

// 生成一个DES算法的密匙

SecretKey key = jiamicreateSecretKey("DES");

// 用密匙加密信息"Hello world!"

String str1 = jiamiencryptToDES(key, "Hello");

Systemoutprintln("使用des加密信息Hello为:" + str1);

// 使用这个密匙解密

String str2 = jiamidecryptByDES(key, str1);

Systemoutprintln("解密后为:" + str2);

// 创建公匙和私匙

jiamicreatePairKey();

// 对Hello world!使用私匙进行签名

jiamisignToInfo("Hello", "mysignbat");

// 利用公匙对签名进行验证。

if (jiamivalidateSign("mysignbat")) {

Systemoutprintln("Success!");

} else {

Systemoutprintln("Fail!");

}

}

}

md5加密,

package utilmd5;

public class Md5{

String hex_chr = "0123456789abcdef";

private String rhex(int num)

{

String str = "";

for(int j = 0; j <= 3; j++)

str = str + hex_chrcharAt((num >> (j 8 + 4)) & 0x0F) + hex_chrcharAt((num >> (j 8)) & 0x0F);

return str;

}

private int[] str2blks_MD5(String str)

{

int nblk = ((strlength() + 8) >> 6) + 1;

int[] blks = new int[nblk 16];

int i = 0;

for(i = 0; i < nblk 16; i++) {

blks[i] = 0;

}

for(i = 0; i < strlength(); i++) {

blks[i >> 2] |= strcharAt(i) << ((i % 4) 8);

}

blks[i >> 2] |= 0x80 << ((i % 4) 8);

blks[nblk 16 - 2] = strlength()8;

return blks;

}

private int add(int x, int y)

{

return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);

}

private int rol(int num, int cnt)

{

return (num << cnt) | (num >>> (32 - cnt));

}

private int cmn(int q, int a, int b, int x, int s, int t)

{

return add(rol(add(add(a, q), add(x, t)), s), b);

}

private int ff(int a, int b, int c, int d, int x, int s, int t)

{

return cmn((b & c) | ((~b) & d), a, b, x, s, t);

}

private int gg(int a, int b, int c, int d, int x, int s, int t)

{

return cmn((b & d) | (c & (~d)), a, b, x, s, t);

}

private int hh(int a, int b, int c, int d, int x, int s, int t)

{

return cmn(b ^ c ^ d, a, b, x, s, t);

}

private int ii(int a, int b, int c, int d, int x, int s, int t)

{

return cmn(c ^ (b | (~d)), a, b, x, s, t);

}

public String calcMD5(String str)

{

int[] x = str2blks_MD5(str);

int a = 0x67452301;

int b = 0xEFCDAB89;

int c = 0x98BADCFE;

int d = 0x10325476;

for(int i = 0; i < xlength; i += 16)

{

int olda = a;

int oldb = b;

int oldc = c;

int oldd = d;

a = ff(a, b, c, d, x[i+ 0], 7 , 0xD76AA478);

d = ff(d, a, b, c, x[i+ 1], 12, 0xE8C7B756);

c = ff(c, d, a, b, x[i+ 2], 17, 0x242070DB);

b = ff(b, c, d, a, x[i+ 3], 22, 0xC1BDCEEE);

a = ff(a, b, c, d, x[i+ 4], 7 , 0xF57C0FAF);

d = ff(d, a, b, c, x[i+ 5], 12, 0x4787C62A);

c = ff(c, d, a, b, x[i+ 6], 17, 0xA8304613);

b = ff(b, c, d, a, x[i+ 7], 22, 0xFD469501);

a = ff(a, b, c, d, x[i+ 8], 7 , 0x698098D8);

d = ff(d, a, b, c, x[i+ 9], 12, 0x8B44F7AF);

c = ff(c, d, a, b, x[i+10], 17, 0xFFFF5BB1);

b = ff(b, c, d, a, x[i+11], 22, 0x895CD7BE);

a = ff(a, b, c, d, x[i+12], 7 , 0x6B901122);

d = ff(d, a, b, c, x[i+13], 12, 0xFD987193);

c = ff(c, d, a, b, x[i+14], 17, 0xA679438E);

b = ff(b, c, d, a, x[i+15], 22, 0x49B40821);

a = gg(a, b, c, d, x[i+ 1], 5 , 0xF61E2562);

d = gg(d, a, b, c, x[i+ 6], 9 , 0xC040B340);

c = gg(c, d, a, b, x[i+11], 14, 0x265E5A51);

b = gg(b, c, d, a, x[i+ 0], 20, 0xE9B6C7AA);

a = gg(a, b, c, d, x[i+ 5], 5 , 0xD62F105D);

d = gg(d, a, b, c, x[i+10], 9 , 0x02441453);

c = gg(c, d, a, b, x[i+15], 14, 0xD8A1E681);

b = gg(b, c, d, a, x[i+ 4], 20, 0xE7D3FBC8);

a = gg(a, b, c, d, x[i+ 9], 5 , 0x21E1CDE6);

d = gg(d, a, b, c, x[i+14], 9 , 0xC33707D6);

c = gg(c, d, a, b, x[i+ 3], 14, 0xF4D50D87);

b = gg(b, c, d, a, x[i+ 8], 20, 0x455A14ED);

a = gg(a, b, c, d, x[i+13], 5 , 0xA9E3E905);

d = gg(d, a, b, c, x[i+ 2], 9 , 0xFCEFA3F8);

c = gg(c, d, a, b, x[i+ 7], 14, 0x676F02D9);

b = gg(b, c, d, a, x[i+12], 20, 0x8D2A4C8A);

a = hh(a, b, c, d, x[i+ 5], 4 , 0xFFFA3942);

d = hh(d, a, b, c, x[i+ 8], 11, 0x8771F681);

c = hh(c, d, a, b, x[i+11], 16, 0x6D9D6122);

b = hh(b, c, d, a, x[i+14], 23, 0xFDE5380C);

a = hh(a, b, c, d, x[i+ 1], 4 , 0xA4BEEA44);

d = hh(d, a, b, c, x[i+ 4], 11, 0x4BDECFA9);

c = hh(c, d, a, b, x[i+ 7], 16, 0xF6BB4B60);

b = hh(b, c, d, a, x[i+10], 23, 0xBEBFBC70);

a = hh(a, b, c, d, x[i+13], 4 , 0x289B7EC6);

d = hh(d, a, b, c, x[i+ 0], 11, 0xEAA127FA);

c = hh(c, d, a, b, x[i+ 3], 16, 0xD4EF3085);

b = hh(b, c, d, a, x[i+ 6], 23, 0x04881D05);

a = hh(a, b, c, d, x[i+ 9], 4 , 0xD9D4D039);

d = hh(d, a, b, c, x[i+12], 11, 0xE6DB99E5);

c = hh(c, d, a, b, x[i+15], 16, 0x1FA27CF8);

b = hh(b, c, d, a, x[i+ 2], 23, 0xC4AC5665);

a = ii(a, b, c, d, x[i+ 0], 6 , 0xF4292244);

d = ii(d, a, b, c, x[i+ 7], 10, 0x432AFF97);

c = ii(c, d, a, b, x[i+14], 15, 0xAB9423A7);

b = ii(b, c, d, a, x[i+ 5], 21, 0xFC93A039);

a = ii(a, b, c, d, x[i+12], 6 , 0x655B59C3);

d = ii(d, a, b, c, x[i+ 3], 10, 0x8F0CCC92);

c = ii(c, d, a, b, x[i+10], 15, 0xFFEFF47D);

b = ii(b, c, d, a, x[i+ 1], 21, 0x85845DD1);

a = ii(a, b, c, d, x[i+ 8], 6 , 0x6FA87E4F);

d = ii(d, a, b, c, x[i+15], 10, 0xFE2CE6E0);

c = ii(c, d, a, b, x[i+ 6], 15, 0xA3014314);

b = ii(b, c, d, a, x[i+13], 21, 0x4E0811A1);

a = ii(a, b, c, d, x[i+ 4], 6 , 0xF7537E82);

d = ii(d, a, b, c, x[i+11], 10, 0xBD3AF235);

c = ii(c, d, a, b, x[i+ 2], 15, 0x2AD7D2BB);

b = ii(b, c, d, a, x[i+ 9], 21, 0xEB86D391);

a = add(a, olda);

b = add(b, oldb);

c = add(c, oldc);

d = add(d, oldd);

}

return rhex(a) + rhex(b) + rhex(c) + rhex(d);

}

public static void main(String[] args)

{

Md5 md = new Md5();

String input;

if (argslength==0) input = "璁捐绷鏁;

else input = args[0];

Systemoutprintln(input);

String str = mdcalcMD5(input);

Systemoutprintln(str);

}

}

提供加密,解密,生成密钥对等方法。�梢愿�模��遣灰��螅�裨蛐�驶岬� keyPairGeninitialize(KEY_SIZE, new SecureRandom()); KeyPair keyPair = keyPairGengenKeyPair(); return keyPair; } catch (Exception e) { throw new Exception(egetMessage()); } } / 生成公钥 @param modulus @param publicExponent @return RSAPublicKey @throws Exception / public static RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) throws Exception { KeyFactory keyFac = null; try { keyFac = KeyFactorygetInstance("RSA", new orgbouncycastlejceproviderBouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { throw new Exception(exgetMessage()); } RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(modulus), new BigInteger(publicExponent)); try { return (RSAPublicKey) keyFacgeneratePublic(pubKeySpec); } catch (InvalidKeySpecException ex) { throw new Exception(exgetMessage()); } } / 生成私钥 @param modulus @param privateExponent @return RSAPrivateKey @throws Exception / public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) throws Exception { KeyFactory keyFac = null; try { keyFac = KeyFactorygetInstance("RSA", new orgbouncycastlejceproviderBouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { throw new Exception(exgetMessage()); } RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger(modulus), new BigInteger(privateExponent)); try { return (RSAPrivateKey) keyFacgeneratePrivate(priKeySpec); } catch (InvalidKeySpecException ex) { throw new Exception(exgetMessage()); } } / 加密 @param key 加密的密钥 @param data 待加密的明文数据 @return 加密后的数据 @throws Exception / public static byte[] encrypt(Key key, byte[] data) throws Exception { try { Cipher cipher = CiphergetInstance("RSA", new orgbouncycastlejceproviderBouncyCastleProvider()); cipherinit(CipherENCRYPT_MODE, key); int blockSize = ciphergetBlockSize();//获得加密块大小� i++; } return raw; } catch (Exception e) { throw new Exception(egetMessage()); } } / 解密 @param key 解密的密钥 @param raw 已经加密的数据 @return 解密后的明文 @throws Exception / public static byte[] decrypt(Key key, byte[] raw) throws Exception { try { Cipher cipher = CiphergetInstance("RSA", new orgbouncycastlejceproviderBouncyCastleProvider()); cipherinit(cipherDECRYPT_MODE, key); int blockSize = ciphergetBlockSize(); ByteArrayOutputStream bout = new ByteArrayOutputStream(64); int j = 0; while (rawlength - j blockSize > 0) { boutwrite(cipherdoFinal(raw, j blockSize, blockSize)); j++; } return bouttoByteArray(); } catch (Exception e) { throw new Exception(egetMessage()); } } / @param args @throws Exception / public static void main(String[] args) throws Exception { File file = new File("c:/testhtml"); FileInputStream in = new FileInputStream(file); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] tmpbuf = new byte[1024]; int count = 0; while ((count = inread(tmpbuf)) != -1) { boutwrite(tmpbuf, 0, count); tmpbuf = new byte[1024]; } inclose(); byte[] orgData = bouttoByteArray(); KeyPair keyPair = RSAgenerateKeyPair(); RSAPublicKey pubKey = (RSAPublicKey) keyPairgetPublic(); RSAPrivateKey priKey = (RSAPrivateKey) keyPairgetPrivate(); byte[] pubModBytes = pubKeygetModulus()toByteArray(); byte[] pubPubExpBytes = pubKeygetPublicExponent()toByteArray(); byte[] priModBytes = priKeygetModulus()toByteArray(); byte[] priPriExpBytes = priKeygetPrivateExponent()toByteArray(); RSAPublicKey recoveryPubKey = RSAgenerateRSAPublicKey(pubModBytes,pubPubExpBytes); RSAPrivateKey recoveryPriKey = RSAgenerateRSAPrivateKey(priModBytes,priPriExpBytes); byte[] raw = RSAencrypt(priKey, orgData); file = new File("c:/encrypt_resultdat"); OutputStream out = new FileOutputStream(file); outwrite(raw); outclose(); byte[] data = RSAdecrypt(recoveryPubKey, raw); file = new File("c:/decrypt_resulthtml"); out = new FileOutputStream(file); outwrite(data); outflush(); outclose(); } } (责任编辑:云子)

我们在开发过程中,肯定会有和第三方或者app端的接口调用。在调用的时候,下面的方法可以来防止非法链接或者恶意攻击。

一、签名

    根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取http的head中的token,校验是否合法(和数据库或者Redis中记录的是否一致,在登录或者初始化的时候,存入数据库/redis)

在使用Base64方式的编码后,Token字符串还是有20多位,有的时候还是嫌它长了。由于GUID本身就有128bit,在要求有良好的可读性的前提下,很难进一步改进了。那我们如何产生更短的字符串呢?还有一种方式就是较少Token的长度,不用GUID,而采用一定长度的随机数,例如64bit,再用Base64编码表示:

    var rnd = new Random();

    var tokenData = userIp+userId;

    rndNextBytes(tokenData);

    var token = ConvertToBase64String(tokenData)TrimEnd('=');

由于这里只用了64bit,此时得到的字符串为Onh0h95n7nw的形式,长度要短一半。这样就方便携带多了。但是这种方式是没有唯一性保证的。不过用来作为身份认证的方式还是可以的(如网盘的提取码)。

二、加密

   客户端和服务器都保存一个秘钥,每次传输都加密,服务端根据秘钥解密。

   客户端:

    1、设置一个key(和服务器端相同)

    2、根据上述key对请求进行某种加密(加密必须是可逆的,以便服务器端解密)

    3、发送请求给服务器

服务器端:

    1、设置一个key

    2、根据上述的key对请求进行解密(校验成功就是「信任」的客户端发来的数据,否则拒绝响应)

    3、处理业务逻辑并产生结果

    4、将结果反馈给客户端

三、第三方支持

  比如spring security-oauth 

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 用java做的登录框 怎么给密码加密?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情