当前位置:Gxlcms > PHP教程 > PHP、Java、Net和Javascript的AES加密解密实现

PHP、Java、Net和Javascript的AES加密解密实现

时间:2021-07-01 10:21:17 帮助过:15人阅读

# PHP篇

  1. <!--?php
  2. $privateKey = "1234567812345678";
  3. $iv = "1234567812345678";
  4. $data = "Test String";
  5. //加密
  6. $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv);
  7. echo '<br/-->';
  8. echo(base64_encode($encrypted));
  9. echo '<br>';
  10. //解密
  11. $encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q==");
  12. $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
  13. echo($decrypted);
  14. ?>

#Javascript篇

# Java篇

  1. import javax.crypto.Cipher;
  2. import javax.crypto.spec.IvParameterSpec;
  3. import javax.crypto.spec.SecretKeySpec;
  4. import org.junit.Test;
  5. @Test
  6. public void testCrossLanguageEncrypt() throws Exception{
  7. System.out.println(encrypt());
  8. System.out.println(desEncrypt());
  9. }
  10. public static String encrypt() throws Exception {
  11. try {
  12. String data = "Test String";
  13. String key = "1234567812345678";
  14. String iv = "1234567812345678";
  15. Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
  16. int blockSize = cipher.getBlockSize();
  17. byte[] dataBytes = data.getBytes();
  18. int plaintextLength = dataBytes.length;
  19. if (plaintextLength % blockSize != 0) {
  20. plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
  21. }
  22. byte[] plaintext = new byte[plaintextLength];
  23. System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
  24. SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
  25. IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
  26. cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
  27. byte[] encrypted = cipher.doFinal(plaintext);
  28. return new sun.misc.BASE64Encoder().encode(encrypted);
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. return null;
  32. }
  33. }
  34. public static String desEncrypt() throws Exception {
  35. try
  36. {
  37. String data = "2fbwW9+8vPId2/foafZq6Q==";
  38. String key = "1234567812345678";
  39. String iv = "1234567812345678";
  40. byte[] encrypted1 = new sun.misc.BASE64Decoder().decodeBuffer(data);
  41. Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
  42. SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
  43. IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
  44. cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
  45. byte[] original = cipher.doFinal(encrypted1);
  46. String originalString = new String(original);
  47. return originalString;
  48. }
  49. catch (Exception e) {
  50. e.printStackTrace();
  51. return null;
  52. }
  53. }

# .Net篇

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Security.Cryptography;
  6. namespace test
  7. {
  8. class Class1
  9. {
  10. static void Main(string[] args)
  11. {
  12. Console.WriteLine("I am comming");
  13. String source = "Test String";
  14. String encryptData = Class1.Encrypt(source, "1234567812345678", "1234567812345678");
  15. Console.WriteLine("=1==");
  16. Console.WriteLine(encryptData);
  17. Console.WriteLine("=2==");
  18. String decryptData = Class1.Decrypt("2fbwW9+8vPId2/foafZq6Q==", "1234567812345678", "1234567812345678");
  19. Console.WriteLine(decryptData);
  20. Console.WriteLine("=3==");
  21. Console.WriteLine("I will go out");
  22. }
  23. public static string Encrypt(string toEncrypt, string key, string iv)
  24. {
  25. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  26. byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
  27. byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
  28. RijndaelManaged rDel = new RijndaelManaged();
  29. rDel.Key = keyArray;
  30. rDel.IV = ivArray;
  31. rDel.Mode = CipherMode.CBC;
  32. rDel.Padding = PaddingMode.Zeros;
  33. ICryptoTransform cTransform = rDel.CreateEncryptor();
  34. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  35. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
  36. }
  37. public static string Decrypt(string toDecrypt, string key, string iv)
  38. {
  39. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  40. byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
  41. byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
  42. RijndaelManaged rDel = new RijndaelManaged();
  43. rDel.Key = keyArray;
  44. rDel.IV = ivArray;
  45. rDel.Mode = CipherMode.CBC;
  46. rDel.Padding = PaddingMode.Zeros;
  47. ICryptoTransform cTransform = rDel.CreateDecryptor();
  48. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  49. return UTF8Encoding.UTF8.GetString(resultArray);
  50. }
  51. }
  52. }

跨语言加解密的要求是:AES/CBC/ZeroPadding 128位模式,key和iv一样,编码统一用utf-8。不支持ZeroPadding的就用NoPadding.

以上就介绍了PHP、Java、Net和Javascript的AES加密解密实现,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行