您的位置:首页 > 编程语言 > PHP开发

PHP,java跨平台AES加密代码

2014-06-20 16:34 441 查看
参考部分网上代码整所得

java代码

--------------------------start---------------------------------------

package com.sql8.net.util;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

public class Encryption {

private static final String KEY_ALGORITHM = "AES";

private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/NoPadding";

public static void main(String args[]) throws Exception {

String data = "Test String";

String key = "f";

System.out.println(encrypt(data, key));

System.out.println(desEncrypt(encrypt(data, key), key));

}

/**

* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位

*

* @param key

* @return

* @author yangxiaoyong

* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net

*/

private static String createKey(String key) {

int num=16;

if (key == null)

key = "sql8.net";

key = key.trim();

int length = key.length();

if (length < num) {

for (int i = 0; i < num - length; i++) {

key = "0" + key;

}

}

if (length > num) {

String k = key.substring(length - num, length);

key = k;

}

return key;

}

/**编码

* @param data

* @param key

* @return

* @throws Exception

* @author yangxiaoyong

* @version 创建时间:2014年6月20日 下午3:49:19

* 参考 www.sql8.net

*/

public static String encrypt(String data, String key) throws Exception {

try {

key = createKey(key);

String iv = key;

Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

int blockSize = cipher.getBlockSize();

byte[] dataBytes = data.getBytes();

int plaintextLength = dataBytes.length;

if (plaintextLength % blockSize != 0) {

plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));

}

byte[] plaintext = new byte[plaintextLength];

System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), KEY_ALGORITHM);

IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);

byte[] encrypted = cipher.doFinal(plaintext);

return new sun.misc.BASE64Encoder().encode(encrypted);

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**解码

* @param data

* @param key

* @return

* @throws Exception

* @author yangxiaoyong

* @version 创建时间:2014年6月20日 下午3:49:04

* 参考 www.sql8.net

*/

public static String desEncrypt(String data, String key) throws Exception {

try {

key = createKey(key);

String iv = key;

byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");

IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

byte[] original = cipher.doFinal(encrypted1);

String originalString = new String(original);

return originalString;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**将byte转成String

* @param data

* @return

* @author yangxiaoyong

* @version 创建时间:2014年6月20日 下午3:48:29

* 参考 www.sql8.net

*/

private static String showByteArray(byte[] data) {

if (null == data) {

return null;

}

StringBuilder sb = new StringBuilder("{");

for (byte b : data) {

sb.append(b).append(",");

}

sb.deleteCharAt(sb.length() - 1);

sb.append("}");

return sb.toString();

}

}

--------------------------end----------------------------------

php代码

--------------------start------------------------------------------

<?php

$key = "f";

$data= "Test String";

$key=createKey($key);

//加密

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $key);

echo(base64_encode($encrypted));

echo '<br/>';

//解密

$encryptedData = base64_decode(base64_encode($encrypted));

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedData, MCRYPT_MODE_CBC, $key);

echo($decrypted);

echo("<br/>");

/**

* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位

*

* @param key

* @return

* @author yangxiaoyong

* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net

*/

function createKey($key)

{

if($key=="")

{

$key="sql8.net";

}

$number =16;

$len=strlen($key);

if($len<$number )

{

for($i=0;$i<$number-$len ;$i++)

{

$key="0".$key;

}

}

if($len>$number)

{

$key=substr($key,$len-$number ,$number );

}

return $key;

}

?>

--------------------------end----------------------------------

下载相关源码文件

php,java跨平台AES加密源码

本文引自:SQL吧|企业网站源码下载(www.sql8.net) 原文参考:http://www.sql8.net/a/course/chengxu/java/2014/0620/25872.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: