java mcrypt encrypt-ag凯发k8国际
php mcrypt_encrypt使用给定的 cipher 和 mode 加密的数据,没有使用pkcs5_pad()函数填充的情况下,如果数据长度不是n*分组大小,则在其后使用“0”补齐。
java 不能使用aes/ecb/pkcs5padding,因为填充方式与php不同,不能正常的解密
在java中应该使用aes/ecb/nopadding方式,手动使用"0",填充补齐
一、php加密解密类示例:
/**
* aes
* aes加密解密算法
* created by phpstorm.
* date: 2015/4/28
* time: 15:41
*/
namespace fin\app\library\util;
class aes {
/**
* 算法,另外还有192和256两种长度
*/
const cipher = mcrypt_rijndael_128;
/**
* 模式
*/
const mode = mcrypt_mode_ecb;
/**
* 加密
* @param string $key 密钥
* @param string $str 需加密的字符串
*
* @return string
*/
static public function encode($key, $str)
{
if(empty($key)){
$key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
}
$size = mcrypt_get_iv_size(self::cipher, self::mode);
$iv = mcrypt_create_iv($size, mcrypt_rand);
$string = mcrypt_encrypt(self::cipher, $key, $str, self::mode, $iv);
$string = base64_encode($string);
return $string;
}
/**
* 解密
* @param type $key
* @param type $str
*
* @return string
*/
static public function decode($key, $str)
{
if(empty($key)){
$key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
}
$size = mcrypt_get_iv_size(self::cipher, self::mode);
$iv = mcrypt_create_iv($size, mcrypt_rand);
$string = base64_decode($str);
$string = mcrypt_decrypt(self::cipher, $key, $string, self::mode, $iv);
/**
* 解决下边问题
* the given cipher and mode. if the size of the data is not n * blocksize,
* the data will be padded with '\0'.
*/
$string = trim($string);
return $string;
}
}
二、 java加密解密类示例:
import javax.crypto.cipher;
import javax.crypto.spec.secretkeyspec;
import org.apache.commons.codec.binary.base64;
import org.apache.commons.lang3.*;
public class security {
public static string encrypt(string input, string key) {
byte[] crypted = null;
try {
input = stringutils.rightpad(input, 16, "\0");
secretkeyspec skey = new secretkeyspec(key.getbytes(), "aes");
cipher cipher = cipher.getinstance("aes/ecb/nopadding");
cipher.init(cipher.encrypt_mode, skey);
crypted = cipher.dofinal(input.getbytes());
} catch (exception e) {
system.out.println(e.tostring());
}
return new string(base64.encodebase64(crypted));
}
public static string decrypt(string input, string key) {
byte[] output = null;
try {
secretkeyspec skey = new secretkeyspec(key.getbytes(), "aes");
cipher cipher = cipher.getinstance("aes/ecb/nopadding");
cipher.init(cipher.decrypt_mode, skey);
output = cipher.dofinal(base64.decodebase64(input));
} catch (exception e) {
system.out.println(e.tostring());
}
return new string(output);
}
public static void main(string[] args) {
string key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
string data = "412016278912497";
system.out.println(security.encrypt(data, key));
system.out.println(security.decrypt(security.encrypt(data, key), key));
}
}
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是ag凯发k8国际为你收集整理的java mcrypt encrypt_php mcrypt_encrypt加密,使用java解密的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: java注解定义时间格式_springb