mysql sha1prng_php AES加密 对应Java SHA1PRNG方式加密

这篇博客介绍了如何使用Java实现AES加密和解密,包括使用SHA1PRNG算法生成一致的加密密钥,以及PKCS5Padding填充方式。代码示例详细展示了加密和解密的过程,对于理解AES加密在Java中的应用非常有帮助。
摘要由CSDN通过智能技术生成

[导读]做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧

做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧,可以参考一下,只有Java的加密源码private static byte[] encrypt(byte[] byteContent, byte[] password) throws Exception

{

KeyGenerator kgen = KeyGenerator.getInstance("AES");

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

secureRandom.setSeed(password);

kgen.init(128, secureRandom);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(1, key);

byte[] result = cipher.doFinal(byteContent);

return result;

}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 = $this->hex2bin($decrypt);

$blockSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$iv = mcrypt_create_iv($blockSize, MCRYPT_RAND);

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

return $this->_pkcs5Unpad($decrypted);

}

function hex2bin($str)

{

$sbin = "";

$len = strlen($str);

for($i = 0; $i 

{

$sbin .= pack("H*", substr($str, $i, 2));

}

return $sbin;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值