首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java 加密解密工具类

Java加密解密工具类通常用于实现数据的加密和解密操作,以保护数据的安全性和隐私性。以下是一个简单的Java加密解密工具类的示例,使用了常见的加密算法如AES(高级加密标准)。

基础概念

  1. 加密:将明文数据转换为不可读的密文数据的过程。
  2. 解密:将密文数据转换回原始明文数据的过程。
  3. 密钥:用于加密和解密的关键数据。
  4. 算法:定义加密和解密操作的规则和方法。

相关优势

  • 安全性:加密可以防止未经授权的访问和数据泄露。
  • 隐私保护:确保敏感信息在传输和存储时不被窃取。
  • 合规性:满足许多行业标准和法律法规的要求。

类型

常见的加密算法包括:

  • 对称加密:如AES、DES。
  • 非对称加密:如RSA、ECC。
  • 哈希算法:如SHA-256、MD5。

应用场景

  • 数据传输:HTTPS协议中的SSL/TLS加密。
  • 数据库存储:敏感信息如密码、信用卡号的加密存储。
  • 文件加密:保护文件内容不被非法访问。

示例代码

以下是一个使用AES算法进行加密和解密的Java工具类示例:

代码语言:txt
复制
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESUtil {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";

    // 生成密钥
    public static SecretKey generateKey(int n) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
        keyGenerator.init(n);
        return keyGenerator.generateKey();
    }

    // 加密
    public static String encrypt(String data, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // 解密
    public static String decrypt(String encryptedData, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedBytes = cipher.doFinal(decodedBytes);
        return new String(decryptedBytes);
    }

    public static void main(String[] args) {
        try {
            // 生成密钥
            SecretKey secretKey = generateKey(128);

            // 加密数据
            String originalData = "Hello, World!";
            String encryptedData = encrypt(originalData, secretKey);
            System.out.println("Encrypted Data: " + encryptedData);

            // 解密数据
            String decryptedData = decrypt(encryptedData, secretKey);
            System.out.println("Decrypted Data: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

常见问题及解决方法

  1. 密钥管理:确保密钥的安全存储和传输,避免泄露。
    • 解决方法:使用硬件安全模块(HSM)或安全的密钥管理系统。
  • 性能问题:加密和解密操作可能会影响系统性能。
    • 解决方法:优化算法选择,使用硬件加速(如AES-NI指令集)。
  • 兼容性问题:不同平台或库之间的加密实现可能存在兼容性问题。
    • 解决方法:确保使用标准的加密算法和模式,并进行充分的测试。

通过以上示例和解释,您可以了解Java加密解密工具类的基本概念、优势、类型、应用场景以及常见问题的解决方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 加密工具类,提供RSA & AES & DES 等加密解密方法工具类介绍加密解密概念使用方法公钥、私钥生成

    github项目地址 https://github.com/XHTeng/XHCryptorTools 工具类介绍 框架从 CryptoExercise(苹果3.0时的包)进行提取扩展 iOS...系统自带相关函数说明,框架主要使用前两种: SecKeyEncrypt 使用公钥对数据加密 SecKeyDecrypt 使用私钥对数据解密 SecKeyRawVerify 使用公钥对数字签名进行验证...协议传输的原理 ---- 加密解密概念 对称加密算法:加密解密都使用相同的秘钥,速度快,适合对大数据加密,方法有DES,3DES,AES等 非对称加密算法 非对称加密算法需要两个密钥:公开密钥(publickey...)和私有密钥(privatekey) 公开密钥与私有密钥是一对,可逆的加密算法,用公钥加密,用私钥解密,用私钥加密,用公钥解密,速度慢,适合对小数据加密,方法有RSA 散列算法(加密后不能解密,上面都是可以解密的...D是私钥,负责解密N负责公钥和私钥之间的联系 加密算法,假定对X进行加密(X ^ E) % N = Y(6)解密算法,根据费尔马小定义,可以使用以下公式完成解密(Y ^ D) % N = X ----

    2.2K110

    Java加密解密介绍

    加密解密介绍 常用的加密算法总体可以分为两类:单项加密和双向加密,双向加密又分为对称加密和非对称加密,因此主要分析下面三种加密算法: 对称加密算法、非对称加密算法和单项加密算法(Hash算法)。...1、对称加密算法(AES、DES、3DES) 对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。...2、非对称加密算法(RSA、DSA) 非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。...数据加密过程:发送者用公钥加密,接收者用私钥解密(只有拥有私钥的接收者才能解读加密的内容) 数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖) 3、Hash...; import java.security.SecureRandom; public class EncryptUtil { public static final String MD5 =

    1.5K10

    Java工具集-Base64进行加密与解密

    简单工具类 写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦 网上好了一些工具类例如commom.lang3或者hutool或者Jodd这样的开源工具,但是 发现他们之中虽然设计不错...,但是如果我想要使用,就必须要引入依赖并且去维护依赖,有些 甚至会有存在版本编译不通过问题,故此想要写作一个每个类都可以作为独立工具类使用 每个使用者只需要复制该类,到任何项目当中都可以使用,所以需要尊从以下两个原则才能...做到.在此诚邀各位大佬参与.可以把各自用过的工具,整合成只依赖JDK,每个类都能够单独 使用的工具.每个人当遇到业务需求需要使用的时候,只需要到这里单独拷贝一个即可使用....介绍 遵从两大原则 1.绝不依赖JDK以外的源码 2.牺牲代码复用性,每个类都必须是单独的组件,绝不互相引用,做到完全解耦 package *; import java.util.Base64;.../** * @program: simple_tools * @description: Base64进行加密与解密 * @author: ChenWenLong * @create: 2019

    1.6K10

    JavaRSA加密工具类

    公钥加密算法,也就是 非对称加密算法,这种算法加密和解密的密码不一样,一个是公钥,另一个是私钥: 公钥和私钥成对出现 公开的密钥叫公钥,只有自己知道的叫私钥 用公钥加密的数据只有对应的私钥可以解密 用私钥加密的数据只有对应的公钥可以解密...; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator...java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; /** * Java...RSA 加密工具类 * */ public class RSAUtils { /** * 密钥长度 于原文长度对应 以及越长速度越慢 */ private final...*/ public static void genKeyPair() throws NoSuchAlgorithmException { // KeyPairGenerator类用于生成公钥和私钥对

    4.3K20

    JS前端加密 后端java解密

    经过排查发现是因为前端在登录的时候没有对密码等用户信息做加密处理 解决方案:   做一下最简单的处理,前端采用JS自带的 atob加密,后端采用工具解密 前端JS代码: //加密字符串,可以先将中文加密...(encStr); return encStr; }, //解密,可以先将ascii解密,然后再将非ascii解密 decrypt(str) {...; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder...通过输入密码为admin加密后得到 YW... 解密后得到admin 后端测试: ?...和前端一致,这样才能做到加密解密的效果 建议:   整体来说就是一次最简单的加密解密,当然这个相对不是特别安全,可以在这个基础之上,对等于号做一些处理,再通过一些其他的算法来多次加密也可以,最好是一些带随机盐的

    9.6K20
    领券