JAVA加密解密字符串

JAVA加密解密字符串

import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * @author 孙永潮
 * @date 2022/10/26
 */
@Slf4j
public class JasyptUtil {
    /**
     * Jasypt生成加密结果
     *
     * @param salt 配置文件中设定的加密盐值
     * @param value    加密值
     * @return
     */
    public static String encryptPwd(String salt, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryPTor(salt));
        String result = encryptor.encrypt(value);
        return result;
    }

    /**
     * 解密
     *
     * @param salt 配置文件中设定的加密盐值
     * @param value    解密密文
     * @return
     */
    public static String decyptPwd(String salt, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryPTor(salt));
        String result = encryptor.decrypt(value);
        return result;
    }

    public static SimpleStringPBEConfig cryPTor(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        return config;
    }

    //盐可以自己设置(中文好像不能用)
    private static final String SALT = "^&zzz.com";
    
    //随便写个main方法试试
    public static void main(String[] args) {
        // 加密
        String encPwd = JasyptUtil.encryptPwd(SALT, "12345678");
        log.info("加密后的值为: {}", encPwd);

        // 解密
        String decPwd = JasyptUtil.decyptPwd(SALT, "fI8z1zmuUk3Qk9uwFcu+tJtOFEeE6i7F9RSutYW4zXvQuX/Xx7echxiJXUjXf3XGqV19fj7FFvI=");
        log.info("解密后的值为: {}", decPwd);
    }
}

pom文件

	<!-- jasypt加解密 -->
	<dependency>
	    <groupId>com.github.ulisesbocchio</groupId>
	    <artifactId>jasypt-spring-boot-starter</artifactId>
	    <version>3.0.5</version>
	</dependency>

BCrypt 单向加密

package 报名.路径.demo;

import cn.dev33.satoken.secure.BCrypt;

/**
 * @Date: 2024/03/18/10:40
 */
public class BCryptDemo {
    public static void main(String[] args) {

        String password = "123456";
        System.out.println("假设原密码为:" + password);

        //用BCrypt 哈希加密(哈希加密是一种单向加密算法,即无法通过哈希值还原出原始的明文密码)
        String hashPassword = BCrypt.hashpw(password);
        System.out.println("加密后 结果为:" + hashPassword);

        //用户输入的密码
        String inputPassword = "123456";
        String inputPw2 = "12345678";

        //用BCrypt 验证(若密码正确,则返回 true)
        boolean boo = BCrypt.checkpw(inputPassword, hashPassword);
        boolean bool = BCrypt.checkpw(inputPw2, hashPassword);

        if (boo) {
            System.out.println(inputPassword + " 密码正确");
        }
        if (!bool) {
            System.out.println(inputPw2 + " 密码错误");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Java加密解密字符串的工具类: ``` import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class CryptoUtil { private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; public static String encrypt(String key, String iv, String value) throws Exception { Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("UTF-8")); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] encrypted = cipher.doFinal(value.getBytes()); return Base64.getEncoder().encodeToString(encrypted); } public static String decrypt(String key, String iv, String encryptedValue) throws Exception { Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("UTF-8")); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedValue)); return new String(decrypted); } } ``` 使用方法: ``` String key = "0123456789abcdef"; String iv = "fedcba9876543210"; String value = "hello world"; String encryptedValue = CryptoUtil.encrypt(key, iv, value); System.out.println("Encrypted value: " + encryptedValue); String decryptedValue = CryptoUtil.decrypt(key, iv, encryptedValue); System.out.println("Decrypted value: " + decryptedValue); ``` 输出: ``` Encrypted value: 2KAAst0EwNfM1qZsJz0DzA== Decrypted value: hello world ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值