PHP、Java、Net和Javascript的AES加密解密实现
# PHP篇
<?php $privateKey = "1234567812345678"; $iv = "1234567812345678"; $data = "Test String"; //加密 $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv); echo '<br/>'; echo(base64_encode($encrypted)); echo '<br>'; //解密 $encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q=="); $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv); echo($decrypted); ?>
#Javascript篇
<script type="text/javascript" src="aes.js"></script> <script type="text/javascript" src="pad-zeropadding.js"></script> <script type="text/javascript">         var data = "Test String";         var key  = CryptoJS.enc.Latin1.parse('1234567812345678');         var iv   = CryptoJS.enc.Latin1.parse('1234567812345678');         //加密         var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});         document.write(encrypted.ciphertext);         document.write('<br/>');         document.write(encrypted.key);         document.write('<br/>');         document.write(encrypted.iv);         document.write('<br/>');         document.write(encrypted.salt);         document.write('<br/>');         document.write(encrypted);         document.write('<br/>');         //解密         var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding});         console.log(decrypted.toString(CryptoJS.enc.Utf8));     </script>
# Java篇
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.junit.Test; @Test public void testCrossLanguageEncrypt() throws Exception{ System.out.println(encrypt()); System.out.println(desEncrypt()); } public static String encrypt() throws Exception { try { String data = "Test String"; String key = "1234567812345678"; String iv = "1234567812345678"; Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); 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(), "AES"); 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; } } public static String desEncrypt() throws Exception { try { String data = "2fbwW9+8vPId2/foafZq6Q=="; String key = "1234567812345678"; String iv = "1234567812345678"; byte[] encrypted1 = new sun.misc.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; } }
# .Net篇
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; namespace test { class Class1 { static void Main(string[] args) { Console.WriteLine("I am comming"); String source = "Test String"; String encryptData = Class1.Encrypt(source, "1234567812345678", "1234567812345678"); Console.WriteLine("=1=="); Console.WriteLine(encryptData); Console.WriteLine("=2=="); String decryptData = Class1.Decrypt("2fbwW9+8vPId2/foafZq6Q==", "1234567812345678", "1234567812345678"); Console.WriteLine(decryptData); Console.WriteLine("=3=="); Console.WriteLine("I will go out"); } public static string Encrypt(string toEncrypt, string key, string iv) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key); byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv); byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.IV = ivArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.Zeros; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } public static string Decrypt(string toDecrypt, string key, string iv) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key); byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv); byte[] toEncryptArray = Convert.FromBase64String(toDecrypt); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.IV = ivArray; rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.Zeros; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray); } } }
跨语言加解密的要求是:AES/CBC/ZeroPadding 128位模式,key和iv一样,编码统一用utf-8。不支持ZeroPadding的就用NoPadding.
以上就介绍了PHP、Java、Net和Javascript的AES加密解密实现,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Dalam pembangunan Java, apabila kita perlu menukar jenis data asas kepada rentetan, kaedah biasa ialah menggunakan fungsi valueOf() kelas String. Fungsi ini boleh menerima parameter jenis data asas dan mengembalikan perwakilan rentetan yang sepadan. Dalam artikel ini, kami akan meneroka cara menggunakan fungsi String.valueOf() untuk penukaran jenis data asas dan menyediakan beberapa contoh kod untuk

Kaedah menukar tatasusunan char kepada rentetan: Ia boleh dicapai dengan penugasan Gunakan sintaks {char a[]=" abc d\0efg ";string s=a;} untuk membenarkan tatasusunan char terus memberikan nilai kepada rentetan, dan laksanakan. kod untuk melengkapkan penukaran.

Gantikan aksara (rentetan) dalam rentetan menggunakan fungsi String.replace() Java Dalam Java, rentetan ialah objek tidak boleh ubah, yang bermaksud apabila objek rentetan dicipta, nilainya tidak boleh diubah suai. Walau bagaimanapun, anda mungkin menghadapi situasi di mana anda perlu menggantikan aksara atau rentetan tertentu dalam rentetan. Pada masa ini, kita boleh menggunakan kaedah replace() dalam kelas String Java untuk melaksanakan penggantian rentetan. Kaedah replace() kelas String mempunyai dua jenis:

Salam semua, hari ini saya akan berkongsi dengan anda pengetahuan asas Java: String. Tidak perlu diperkatakan kepentingan kelas String, ia boleh dikatakan sebagai kelas yang paling banyak digunakan dalam pembangunan back-end kami, jadi adalah perlu untuk membincangkannya.

Gunakan fungsi String.length() Java untuk mendapatkan panjang rentetan Dalam pengaturcaraan Java, rentetan ialah jenis data yang sangat biasa Kita selalunya perlu mendapatkan panjang rentetan, iaitu bilangan aksara dalam rentetan. Di Java, kita boleh menggunakan fungsi length() kelas String untuk mendapatkan panjang rentetan. Berikut ialah kod contoh mudah: publicclassStringLengthExample{publ

Dalam pengaturcaraan Golang, jenis bait, rune dan rentetan adalah jenis data yang sangat asas dan biasa. Mereka memainkan peranan penting dalam memproses operasi data seperti rentetan dan aliran fail. Apabila melakukan operasi data ini, kita biasanya perlu menukarnya kepada satu sama lain, yang memerlukan penguasaan beberapa kemahiran penukaran. Artikel ini akan memperkenalkan teknik penukaran jenis bait, rune dan rentetan bagi fungsi Golang, bertujuan untuk membantu pembaca memahami dengan lebih baik jenis data ini dan dapat mengaplikasikannya dengan mahir dalam amalan pengaturcaraan.

1. Memahami String1 dalam JDK Pertama, mari kita lihat kod sumber kelas String dalam JDK Ia melaksanakan banyak antara muka. Anda boleh melihat bahawa kelas String diubah suai diwarisi dan tiada subkelas kelas String, supaya semua orang yang menggunakan JDK menggunakan kelas String yang sama dua orang yang berbeza Menggunakan kaedah yang sama menunjukkan hasil yang berbeza, yang menjadikannya mustahil untuk membangunkan kod Warisan dan kaedah mengatasi bukan sahaja membawa fleksibiliti, tetapi juga menyebabkan banyak subkelas berkelakuan berbeza.

Kaedah split dalam String menggunakan kaedah split() String untuk memisahkan String mengikut aksara atau rentetan yang masuk dan mengembalikan tatasusunan split. 1. Penggunaan umum Apabila menggunakan aksara umum, seperti @ atau, sebagai pemisah: Stringaddress="Shanghai@Shanghai City@Minhang District@Wuzhong Road";String[]splitAddr=address.split("@");System .out. println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3
