Java中对字符串进行加密和解密

import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
import java.security.spec.*;
import com.sun.crypto.provider.SunJCE;
import java.io.Serializable;

/**
* 提供加密算法,可以对输入的字符串进行加密、解密操作
*/
public class EncryptData
{
     byte[] encryptKey;
     DESedeKeySpec spec;
     SecretKeyFactory keyFactory;
     SecretKey theKey;
     Cipher cipher;
     IvParameterSpec IvParameters;

     public   EncryptData()
     {
         try
         {
             // 检测是否有 TripleDES 加密的供应程序
             // 如无,明确地安装SunJCE 供应程序
             try{ Cipher c = Cipher.getInstance("DESede"); }
             catch (Exception e)
             {
                 System.err.println("Installling SunJCE provider.");
                 Provider sunjce = new com.sun.crypto.provider.SunJCE();
                 Security.addProvider(sunjce);
             }
             // 创建一个密钥
             encryptKey = "This is a test DESede Key".getBytes();

             // 为上一密钥创建一个指定的 DESSede key
             spec = new DESedeKeySpec(encryptKey);

             // 得到 DESSede keys
             keyFactory = SecretKeyFactory.getInstance("DESede");

             // 生成一个 DESede 密钥对象
             theKey = keyFactory.generateSecret(spec);

             // 创建一个 DESede 密码
             cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

             // 为 CBC 模式创建一个用于初始化的 vector 对象
             IvParameters =
                     new IvParameterSpec(new byte[]{12,34,56,78,90,87,65,43} );
         }
         catch (Exception exc)
         {
             // 记录加密或解密操作错误
         }
     }

     /**
      * 加密算法
      * @param password   等待加密的密码
      * @return           加密以后的密码
      * @throws Exception
      */
     public byte[] encrypt(String password)
     {
         String encrypted_password = null;
         byte[] encrypted_pwd = null;

         try
         {
             // 以加密模式初始化密钥
             cipher.init(Cipher.ENCRYPT_MODE,theKey,IvParameters);

             // 加密前的密码(旧)
             byte[] plainttext = password.getBytes();

             // 加密密码
             encrypted_pwd = cipher.doFinal(plainttext);

             // 转成字符串,得到加密后的密码(新)
             encrypted_password = new String(encrypted_pwd);
         }
         catch(Exception ex)
         {
             // 记录加密错误
         }
         return encrypted_pwd;
     }

     /**
      * 解密算法
      * @param password   加过密的密码
      * @return           解密后的密码
      */
     public String decrypt(byte[] password)
     {
         String decrypted_password = null;
         try
         {
             // 以解密模式初始化密钥
             cipher.init(Cipher.DECRYPT_MODE,theKey,IvParameters);

             // 构造解密前的密码
             byte[] decryptedPassword = password;

             // 解密密码
             byte[] decrypted_pwd = cipher.doFinal(decryptedPassword);
             // 得到结果
             decrypted_password = new String(decrypted_pwd);
         }
         catch(Exception ex)
         {
             // 记录解密错误
         }
         return decrypted_password;
     }
}

转载于:https://www.cnblogs.com/interdrp/archive/2009/07/22/1528739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java实现字符串的AES加密解密可以使用Java Cryptography Extension (JCE)提供的API。以下是一个简单的示例代码: 加密: ``` import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESEncryption { public static String encrypt(String plainText, String key) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encryptedBytes = cipher.doFinal(plainText.getBytes()); return Base64.getEncoder().encodeToString(encryptedBytes); } } ``` 解密: ``` import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESDecryption { public static String decrypt(String encryptedText, String key) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); return new String(decryptedBytes); } } ``` 其,`encrypt`方法接受两个参数:待加密的明文和密钥,返回加密后的密文;`decrypt`方法接受两个参数:待解密的密文和密钥,返回解密后的明文。这里使用的是AES算法,采用ECB模式和PKCS5Padding填充方式。在实际应用,需要注意密钥的安全性和密文的传输安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值