【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

使用 Java 对敏感数据进行安全的 AES 加密 (确认浏览器允许使用java)

用户投稿2024-04-19热门资讯14

安全地存储和传输敏感数据对于应用程序和组织来说至关重要。Java 提供了强大的 API,允许开发人员轻松地对敏感数据进行安全的 AES 加密,从而保护其免遭未经授权的访问。

AES 加密简介

高级加密标准 (AES) 是一种对称块密码,自 2001 年以来一直被美国国家标准技术研究所 (NIST) 批准使用。它是一种快速且安全的加密算法,广泛用于各种应用中,包括保护敏感数据、身份验证和数字签名。

AES 支持 128 位、192 位和 256 位密钥长度。密钥长度越高,加密强度越高。对于大多数应用程序,128 位密钥长度就足够了。

使用 Java 进行 AES 加密

Java 提供了一个称为 javax.crypto 的包,其中包含用于加密和解密数据的类。要使用 AES 加密敏感数据,可以按照以下步骤操作:

1. 生成 AES 密钥

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;public class AESEncryption {public static SecretKey generateAESKey() throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128); // 128 位密钥长度return keyGenerator.generateKey();}}

2. 初始化 AES 加密器

import javax.crypto.Cipher;public class AESEncryption {public static Cipher initCipher(SecretKey key, int mode) throws Exception {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(mode, key);return cipher;}}

3. 加密数据

import javax.crypto.Cipher;public class AESEncryption {public static byte[] encrypt(byte[] data, SecretKey key) throws Exception {Cipher cipher = initCipher(key, Cipher.ENCRYPT_MODE);return cipher.doFinal(data);}}

4. 解密数据

import javax.crypto.Cipher;public class AESEncryption {public static byte[] decrypt(byte[] encryptedData, SecretKey key) throws Exception {Cipher cipher = initCipher(key, Cipher.DECRYPT_MODE);return cipher.doFinal(encryptedData);}}

最佳实践

使用 AES 加密敏感数据时,遵循以下最佳实践非常重要:

  • 使用强密鑰。密钥长度至少應為 128 位,並且應由隨機生成器生成。
  • 保持密鑰安全。切勿在未加密的情況下存儲或傳輸密鑰。
  • 使用 CBC 模式並在初始化加密器之前添加初始化向量 (IV)。IV 用於防止 ECB 模式中的模式攻擊。
  • 使用 PKCS5 填充。這有助於保護您的數據免遭填充攻擊。
  • 定期輪換密鑰。隨著時間的推移,密鑰可能會被洩露或破解。建議每隔一段時間更換一次密鑰。

结论

Java 中的 AES 加密提供了一种简单而安全的方法来保护敏感数据免遭未经授权的访问。通过遵循最佳实践,您可以确保您的数据受到保护并符合安全标准。


Java加密和数字签名

Java加密和数字签名本文主要谈一下密码学中的加密和数字签名 以及其在java中如何进行使用 对密码学有兴趣的伙伴 推荐看 Bruce Schneier的著作 Applied Crypotography 在jdk 的发行版本中安全性方面有了很大的改进 也提供了对RSA算法的直接支持 现在我们从实例入手解决问题(本文仅是作为简单介绍)

一 密码学上常用的概念

)消息摘要

这是一种与消息认证码结合使用以确保消息完整性的技术 主要使用单向散列函数算法 可用于检验消息的完整性 和通过散列密码直接以文本形式保存等 目前广泛使用的算法有MD MD SHA jdk 对上面都提供了支持 在java中进行消息摘要很简单 java security MessageDigest提供了一个简易的操作方法

/** *MessageDigestExample java *Copyright*/ import java security MessageDigest; /** *单一的消息摘要算法 不使用密码 可以用来对明文消息(如 密码)隐藏保存 */ public class MessageDigestExample{public static void main(String[] args) throws Exception{ if(args length!= ){System err println( Usage:java MessageDigestExample text );System exit( ); }

byte[] plainText=args[ ] getBytes( UTF );

//使用getInstance( 算法 )来获得消息摘要 这里使用SHA 的 位算法 MessageDigest messageDigest=MessageDigest getInstance( SHA );

System out println( \n +messageDigest getProvider() getInfo()); //开始使用算法 messageDigest update(plainText); System out println( \nDigest: ); //输出算法运算结果 System out println(new String(messageDigest digest() UTF ));} } 还可以通过消息认证码来进行加密实现 javax crypto Mac提供了一个解决方案 有兴趣者可以参考相关API文档 本文只是简单介绍什么是摘要算法

这里补充另一个运用消息摘要的方式加密的例子: public class TestEncrypt {

public TestEncrypt() { }

/** * @param strSrc :strSrc is a string will be encrypted* @param encName : encName is the algorithm name will be used* encName dafault to MD* @return String */ public String Encrypt(String strSrc String encName) {

MessageDigest md = null; String strDes = null;

byte[] bt = strSrc getBytes(); try { if (encName == null || encName equals( )) { encName = MD ; } md = MessageDigest getInstance(encName); md update(bt); strDes = bytes Hex(md digest()); //to HexString } catch (NoSuchAlgorithmException e) { System out println( Invalid algorithm ); return null; } return strDes; }

public String bytes Hex(byte[] bts) { String des = ; String tmp = null; for (int i = ; i < bts length; i++) { tmp = (Integer toHexString(bts[i] & xFF)); if (tmp length() == ) { des += ; } des += tmp; } return des; }

public static void main(String[]args) { TestEncrypt te = new TestEncrypt(); String strSrc = 可以加密汉字 Oh and english ; System out println( Source String: + strSrc); System out println( Encrypted String: ); System out println( Use Def: + te Encrypt(strSrc null)); System out println( Use MD : + te Encrypt(strSrc MD )); System out println( Use SHA: + te Encrypt(strSrc SHA )); System out println( Use SHA : + te Encrypt(strSrc SHA )); } }

另外 在javawebparts中的 RequestHelpers里的generateGUID方法也涉及到了MD 的方法 代码如下: public static String generateGUID(HttpServletRequest request) {

String out = ; try { // Construct a string that is prised of: // Remote IP Address + Host IP Address + Date (yyyyMMdd) + // Time (hhmmssSSa) + Requested Path + Session ID + // HashCode Of ParameterMap StringBuffer *** = new StringBuffer( ); *** append(request getRemoteAddr()); InetAddress ia = InetAddress getLocalHost(); *** append(ia getHostAddress()); *** append(new SimpleDateFormat( yyyyMMddhhmmssSSa ) format(new Date())); String path = request getServletPath(); String pathInfo = request getPathInfo(); if (pathInfo != null) { path += pathInfo; } *** append(path); *** append(request getSession(false)); *** append(request getParameterMap() hashCode()); String str = *** toString(); // Now encode the string using an MD encryption algorithmMessageDigest md = MessageDigest getInstance( md ); md update(str getBytes()); byte[] digest = md digest(); StringBuffer hexStr = new StringBuffer( ); for (int i = ; i < digest length; i++) { str = Integer toHexString( xFF & digest[i]); if (str length() < ) { str = + str; } hexStr append(str); } out = hexStr toString(); } catch (NoSuchAlgorithmException nsae) { log error(nsae); } catch (UnknownHostException uhe) { log error(uhe); } // Return the encrypted string It should be unique based on the // ponents that prise the plain text string and should always be // characters thanks to the MD algorithmreturn out;

} // End generateGUID()

)私钥加密

消息摘要只能检查消息的完整性 但是单向的 对明文消息并不能加密 要加密明文的消息的话 就要使用其他的算法 要确保机密性 我们需要使用私钥密码术来交换私有消息

这种最好理解 使用对称算法 比如 A用一个密钥对一个文件加密 而B读取这个文件的话 则需要和A一样的密钥 双方共享一个私钥(而在web环境下 私钥在传递时容易被侦听)

使用私钥加密的话 首先需要一个密钥 可用javax crypto KeyGenerator产生一个密钥(java security Key) 然后传递给一个加密工具(javax crypto Cipher) 该工具再使用相应的算法来进行加密 主要对称算法有 DES(实际密钥只用到 位) AES(支持三种密钥长度 位) 通常首先 位 其他的还有DESede等 jdk 种也提供了对对称算法的支持 以下例子使用AES算法来加密

/** *PrivateExmaple java *Copyright*/ import javax crypto Cipher; import javax crypto KeyGenerator; import java security Key;

/** *私鈅加密 保证消息机密性 */ public class PrivateExample{public static void main(String[] args) throws Exception{ if(args length!= ){System err println( Usage:java PrivateExample <text> );System exit( ); } byte[] plainText=args[ ] getBytes( UTF );

//通过KeyGenerator形成一个key System out println( \nStart generate AES key ); KeyGenerator keyGen=KeyGenerator getInstance( AES ); keyGen init( ); Key key=keyGen generateKey(); System out println( Finish generating DES key );

//获得一个私鈅加密类Cipher ECB是加密方式 PKCS Padding是填充方法 Cipher cipher=Cipher getInstance( AES/ECB/PKCS Padding ); System out println( \n +cipher getProvider() getInfo());

//使用私鈅加密 System out println( \nStart encryption: ); cipher init(Cipher ENCRYPT_MODE key); byte[] cipherText=cipher doFinal(plainText); System out println( Finish encryption: ); System out println(new String(cipherText UTF ));

System out println( \nStart decryption: ); cipher init(Cipher DECRYPT_MODE key); byte[] newPlainText=cipher doFinal(cipherText); System out println( Finish decryption: );

System out println(new String(newPlainText UTF ));

)公钥加密

上面提到 私钥加密需要一个共享的密钥 那么如何传递密钥呢?web环境下 直接传递的话很容易被侦听到 幸好有了公钥加密的出现 公钥加密也叫不对称加密 不对称算法使用一对密钥对 一个公钥 一个私钥 使用公钥加密的数据 只有私钥能解开(可用于加密) 同时 使用私钥加密的数据 只有公钥能解开(签名) 但是速度很慢(比私钥加密慢 到 倍) 公钥的主要算法有RSA 还包括Blowfish Diffie Helman等 jdk 种提供了对RSA的支持 是一个改进的地方

/** *PublicExample java *Copyright*/ import java security Key; import javax crypto Cipher; import java security KeyPairGenerator; import java security KeyPair; /** *一个简单的公鈅加密例子 Cipher类使用KeyPairGenerator生成的公鈅和私鈅 */ public class PublicExample{public static void main(String[] args) throws Exception{ if(args length!= ){System err println( Usage:java PublicExample <text> );System exit( ); }

byte[] plainText=args[ ] getBytes( UTF ); //构成一个RSA密钥 System out println( \nStart generating RSA key ); KeyPairGenerator keyGen=KeyPairGenerator getInstance( RSA ); keyGen initialize( ); KeyPair key=keyGen generateKeyPair(); System out println( Finish generating RSA key );

//获得一个RSA的Cipher类 使用公鈅加密 Cipher cipher=Cipher getInstance( RSA/ECB/PKCS Padding ); System out println( \n +cipher getProvider() getInfo());

System out println( \nStart encryption ); cipher init(Cipher ENCRYPT_MODE key getPublic()); byte[] cipherText=cipher doFinal(plainText); System out println( Finish encryption: ); System out println(new String(cipherText UTF ));

lishixinzhi/Article/program/Java/hx//

在java中,对一些敏感数据,用什么类型来存储更安全,为什么?

系统里的数据类型是根据你的业务以及线程安全性能来选择的,比如金额适合使用bigdecimal类型,方便对金额的管理。 对某个字段经常进行修改的使用StringBuffer类型,可以提升线程安全的等级,也可以减少服务器的负担。 关于数据的安全性,泛指系统之间的数据交互,比如我系统A向系统B发送客户的信息需要获取用户的详细资料,这时两边都需要对发送的数据进行加密,比如RSA SM加密等,也可以使用加密的传输协议HTTPS,这样数据不会被第三方查看,从而保持了数据安全性。

java实现ase加密解密

这个算法java SDK自带的额 参考代码如下:

/**解密

*@paramcontent待解密内容

*@parampassword解密密钥

publicstaticbyte[]decrypt(byte[]content,Stringpassword){

KeyGeneratorkgen=(AES);

(128,newSecureRandom(()));

SecretKeysecretKey=();

byte[]enCodeFormat=();

SecretKeySpeckey=newSecretKeySpec(enCodeFormat,AES);

Ciphercipher=(AES);//创建密码器

(_MODE,key);//初始化

byte[]result=(content);

returnresult;//加密

}catch(NoSuchAlgorithmExceptione){

}catch(NoSuchPaddingExceptione){

}catch(InvalidKeyExceptione){

}catch(IllegalBlockSizeExceptione){

}catch(BadPaddingExceptione){

returnnull;

*加密

*@paramcontent需要加密的内容

*@parampassword加密密码

publicstaticbyte[]encrypt(Stringcontent,Stringpassword){

KeyGeneratorkgen=(AES);

(128,newSecureRandom(()));

SecretKeysecretKey=();

byte[]enCodeFormat=();

SecretKeySpeckey=newSecretKeySpec(enCodeFormat,AES);

Ciphercipher=(AES);//创建密码器

byte[]byteContent=(utf-8);

(_MODE,key);//初始化

byte[]result=(byteContent);

returnresult;//加密

}catch(NoSuchAlgorithmExceptione){

}catch(NoSuchPaddingExceptione){

}catch(InvalidKeyExceptione){

使用 Java 对敏感数据进行安全的 AES 加密 (确认浏览器允许使用java) 第1张

}catch(UnsupportedEncodingExceptione){

}catch(IllegalBlockSizeExceptione){

}catch(BadPaddingExceptione){

returnnull;

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

使用 Java 对敏感数据进行安全的 AES 加密 (确认浏览器允许使用java) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!