java为什么要加密(java 开发中。为什么要有对密码帐户进行加密呢。)
大家好,今天小编来为大家解答以下的问题,关于java为什么要加密,java 开发中。为什么要有对密码帐户进行加密呢。这个很多人还不知道,现在让我们一起来看看吧!
为什么java的安全性比较高
java的安全性体现在两个方面:
1、语言层次的安全性主要体现在:
Java取消了强大但又危险的指针,而代之以引用。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。
垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。避免程序错误回收程序核心类库的内存,导致系统崩溃。
异常处理机制:Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。
强制类型转换:只有在满足强制转换规则的情况下才能强转成功。
底层的安全性可以从以下方面来说明
Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。
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加密
*
*@paramkey
*@return
*@throwsException
*/
publicstaticStringencryptBASE64(byte[]key)throwsException{
return(newBASE64Encoder()).encodeBuffer(key);
}
/**
*MD5加密
*
*@paramdata
*@return
*@throwsException
*/
publicstaticbyte[]encryptMD5(byte[]data)throwsException{
MessageDigestmd5=MessageDigest.getInstance(KEY_MD5);
md5.update(data);
returnmd5.digest();
}
/**
*SHA加密
*
*@paramdata
*@return
*@throwsException
*/
publicstaticbyte[]encryptSHA(byte[]data)throwsException{
MessageDigestsha=MessageDigest.getInstance(KEY_SHA);
sha.update(data);
returnsha.digest();
}
}
/**
*初始化HMAC密钥
*
*@return
*@throwsException
*/
publicstaticStringinitMacKey()throwsException{
KeyGeneratorkeyGenerator=KeyGenerator.getInstance(KEY_MAC);
SecretKeysecretKey=keyGenerator.generateKey();
returnencryptBASE64(secretKey.getEncoded());
}
/**
*HMAC加密
*
*@paramdata
*@paramkey
*@return
*@throwsException
*/
publicstaticbyte[]encryptHMAC(byte[]data,Stringkey)throwsException{
SecretKeysecretKey=newSecretKeySpec(decryptBASE64(key),KEY_MAC);
Macmac=Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
returnmac.doFinal(data);
}
java用md5密码加密有必要吗
F4813E1D0AF19C455AA572E092724C82
你把这个MD5给我破解一下。
MD5的转换是不可逆的,系统把你输入的密码转换成MD5字符串,但没有人可以把MD5字符串再转换成你的密码。数据库里面存的就是MD5字符串,验证的时候把用户输入的密码转换成MD5字符串和数据库里面的数据进行比较。所以说连数据库管理员都不知道你的密码。
java 开发中。为什么要有对密码帐户进行加密呢。
简单说
首先
防止内鬼,如果内部人员拿走了数据库的数据但是他看不懂,那么这个数据到哪也没用了。
再者,这样的数据即使被偷了他们也看不懂,这样才更安全一些,像密码这样的一般采用不可逆的算法加密,比如MD5
只能把你输入的密码跟数据库加密以后的密码进行比较而不能解密,这样,给你一个完整的用户密码的数据库,你也没法解的。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!