التشفير في Java: التشفير والتجزئة - دليل مفصل
في عالم أمن المعلومات الحديث، يعتبر التشفير حجر الأساس لحماية البيانات. توفر Java مجموعة أدوات مدمجة قوية لتنفيذ التشفير والتجزئة من خلال الحزم javax.crypto و java.security. في هذه المقالة، سنستعرض بالتفصيل عمليات التشفير الأساسية في Java: التشفير المتماثل وغير المتماثل، تجزئة كلمات المرور، والعمل مع التوقيعات الرقمية.
1. أساسيات التشفير في Java
Java Cryptography Architecture (JCA) هو إطار عمل يسمح للمطورين بدمج خوارزميات التشفير بسهولة. الفئات الرئيسية:
javax.crypto.Cipher- للتشفير وفك التشفير.java.security.MessageDigest- للتجزئة.java.security.KeyPairGenerator- لتوليد المفاتيح.javax.crypto.spec.SecretKeySpec- لإنشاء مفاتيح متماثلة.
للعمل مع التشفير، قم باستيراد:
import javax.crypto.*;import javax.crypto.spec.*;import java.security.*;2. التشفير المتماثل (AES)
يستخدم التشفير المتماثل مفتاحًا واحدًا للتشفير وفك التشفير. AES (Advanced Encryption Standard) هو الخوارزمية الأكثر شيوعًا. مثال لتشفير سلسلة نصية:
import javax.crypto.*;import javax.crypto.spec.*;import java.util.Base64;
public class AesExample { public static void main(String[] args) throws Exception { String plainText = "رسالة سرية"; String secretKey = "0123456789abcdef"; // 16 بايت لـ AES-128
// إنشاء المفتاح SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// التشفير cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] encryptedBytes = cipher.doFinal(plainText.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("مشفر: " + encryptedText);
// فك التشفير cipher.init(Cipher.DECRYPT_MODE, keySpec); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText)); String decryptedText = new String(decryptedBytes); System.out.println("مفكوك التشفير: " + decryptedText); }}هام: وضع ECB غير موصى به للبيانات الكبيرة. استخدم AES/GCM/NoPadding لأمان أفضل.
3. التشفير غير المتماثل (RSA)
يستخدم التشفير غير المتماثل زوجًا من المفاتيح: مفتاح عام (للتشفير) ومفتاح خاص (لفك التشفير). RSA هو خوارزمية كلاسيكية. مثال:
import javax.crypto.*;import java.security.*;import java.util.Base64;
public class RsaExample { public static void main(String[] args) throws Exception { // توليد زوج المفاتيح KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair pair = keyGen.generateKeyPair(); PublicKey publicKey = pair.getPublic(); PrivateKey privateKey = pair.getPrivate();
// التشفير بالمفتاح العام Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encryptedBytes = cipher.doFinal("بيانات سرية".getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("مشفر بـ RSA: " + encryptedText);
// فك التشفير بالمفتاح الخاص cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));