base64 aes java_Java加密、解密--AES_Base64

1 /*

2 *3 *4 *5 *6 */

7 packageweaver.interfaces.encode;8

9 importjava.security.SecureRandom;10

11 importjavax.crypto.Cipher;12 importjavax.crypto.KeyGenerator;13 importjavax.crypto.SecretKey;14 importjavax.crypto.spec.SecretKeySpec;15

16 importweaver.general.Base64;17 importweaver.integration.logging.Logger;18 importweaver.integration.logging.LoggerFactory;19

20 /**

21 * AES加密解密,Base64转码22 *@authorchengf23 *24 */

25 public class AES_Base64 implementsIEncode {26 /**

27 * 系统集成日志对象,用于统一输出日志到系统集成日志文件中。28 */

29 private static Logger newlog = LoggerFactory.getLogger(AES_Base64.class);30

31 /**

32 * 密码33 */

34 private String pwd = null;35

36 /**

37 * 构造器38 */

39 publicAES_Base64() {40

41 }42

43 /**

44 * 构造器45 *@parampwd 密码46 */

47 publicAES_Base64(String pwd) {48 this.pwd =pwd;49 }50

51 /**

52 * 将传入的明文转换为密文53 *54 *@paramstr 明文字符串55 *@return加密后的密文56 */

57 publicString encode(String str) {58 byte[] result = null;59 try{60 KeyGenerator kgen = KeyGenerator.getInstance("AES");61 SecureRandom random = SecureRandom.getInstance("SHA1PRNG");62 if (pwd == null) {63 pwd = "ecology9";64 }65 random.setSeed(pwd.getBytes());66 kgen.init(128, random);67 SecretKey secretKey =kgen.generateKey();68 byte[] enCodeFormat =secretKey.getEncoded();69 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");70

71 //创建密码器

72 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");73 cipher.init(Cipher.ENCRYPT_MODE, key);74 byte[] byteContent =str.getBytes();75 result =cipher.doFinal(byteContent);76

77 } catch(Exception e) {78 newlog.error("加密异常!", e);79 return null;80 }81

82 return newString(Base64.encode(result));83 }84

85 /**

86 * 将传入的密文转换为明文87 *88 *@paramstr 密文字符串89 *@return解密后的明文90 */

91 publicString decode(String str) {92 byte[] result = null;93 byte[] content =Base64.decode(str.getBytes());94 try{95 KeyGenerator kgen = KeyGenerator.getInstance("AES");96 SecureRandom random = SecureRandom.getInstance("SHA1PRNG");97 if (pwd == null) {98 pwd = "ecology9";99 }100 random.setSeed(pwd.getBytes());101 kgen.init(128, random);102 SecretKey secretKey =kgen.generateKey();103 byte[] enCodeFormat =secretKey.getEncoded();104 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");105

106 //创建密码器

107 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");108 cipher.init(Cipher.DECRYPT_MODE, key);109 result =cipher.doFinal(content);110

111 } catch(Exception e) {112 newlog.error("解密异常!", e);113 return null;114 }115

116 return newString(result);117 }118

119 /**

120 * 设置加密和解密的密钥121 *122 *@parampwd 加密密钥123 *@returntrue:成功,false:失败124 */

125 public booleansetPwd(String pwd) {126 this.pwd =pwd;127 return true;128 }129

130 /**

131 * 设置加密和解密的向量132 *@paramiv 加密向量133 *@returntrue:成功,false:失败134 */

135 public booleansetIv(String iv) {136 return true;137 }138

139 /**

140 * 主程序141 *@paramargs 参数142 */

143 public static voidmain(String[] args) {144 AES_Base64 aesBase64 = newAES_Base64();145 String content = "测试test";146 //AES的密钥长度最好是16位(不是必须)

147 String password = "ecology9";148 aesBase64.setPwd(password);149 //加密150 //System.out.println("加密前:" + content);

151 String encodeResultStr =aesBase64.encode(content);152 //System.out.println("加密后:" + encodeResultStr);153 //解密

154 String decodeResultStr =aesBase64.decode(encodeResultStr);155 //System.out.println("解密后:" + decodeResultStr);

156 }157

158 }

然后对应封装了一个PHP类:

PHP代码

class AES {

//PKCS5Padding 补码方式

private function _pkcs5Pad($text, $blockSize) {

$pad = $blockSize - (strlen($text) % $blockSize);

return $text . str_repeat(chr($pad), $pad);

}

private function _pkcs5Unpad($text) {

$end = substr($text, -1);

$last = ord($end);

$len = strlen($text) - $last;

if(substr($text, $len) == str_repeat($end, $last)) {

return substr($text, 0, $len);

}

return false;

}

//加密

public function encrypt($encrypt, $key) {

$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$paddedData = $this->_pkcs5Pad($encrypt, $blockSize);

$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

$key2 = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true),0,16);

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $paddedData, MCRYPT_MODE_ECB, $iv);

return base64_encode($encrypted);

}

//解密

public function decrypt($decrypt, $key) {

$decoded = base64_decode($decrypt);

$blockSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$iv = mcrypt_create_iv($blockSize, MCRYPT_RAND);

$key2 = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key2, $decoded, MCRYPT_MODE_ECB, $iv);

return $this->_pkcs5Unpad($decrypted);

}

}

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值