Ana içeriğe geç

CooLWJ'de ara

选择搜索范围,输入关键词后按回车。

Dil

Şifreleme ve Şifre Çözme Sanatı

Bir Simetrik şifreleme

Simetrik şifreleme ve asimetrik şifreleme, veri güvenliği ve bilgi aktarımında önemli roller oynayan iki farklı şifreleme yöntemidir. Aşağıda bu iki şifreleme tekniğini ayrı ayrı tanıtacağım:

1.1 Simetrik şifreleme(Simetrik Şifreleme)

Simetrik şifreleme, şifreleme ve şifre çözme işlemlerinde aynı anahtarın kullanılmasıdır. Bu, hem gönderenin hem de alıcının şifreleme ve şifre çözme işlemlerini yapabilmek için bu anahtara sahip olması gerektiği anlamına gelir.

Yaygın simetrik şifreleme algoritmaları:

  • AES(Gelişmiş Şifreleme Standardı)

  • DES(Veri Şifreleme Standardı)

  • 3DES(Üçlü Veri Şifreleme Algoritması)

1.2 Simetrik şifrelemenin özellikleri

Genel olarak simetrik şifrelemenin özellikleri şunlardır:

  1. Nispeten hızlı:Şifreleme ve şifre çözmede aynı anahtar kullanıldığı için simetrik şifreleme genellikle asimetrik şifrelemeden daha hızlıdır。

  2. Anahtar yönetimi:Simetrik şifrelemedeki başlıca zorluk, anahtarların dağıtımı ve yönetimidir. Anahtar sızarsa şifrelemenin güvenliği tehlikeye girer.

  3. Büyük miktarda veri için uygundur:Hızlı olması nedeniyle simetrik şifreleme, büyük miktarda veriyi şifrelemeye uygundur.

Buradan simetrik şifrelemenin başlıca iki avantajı olduğu görülebilir: Birincisi işlem hızının yüksek olması, ikincisi büyük miktarda veriye uygun olmasıdır.

Ancak simetrik şifrelemenin kritik bir sorunu vardır: anahtar yönetimi. Anahtarın sunucudan istemciye güvenli biçimde nasıl aktarılacağı bir sorundur! Ayrıca bire çok iletişimde anahtarların sızmasını önleyecek biçimde yönetilmesi de bir sınavdır. Bu, simetrik şifrelemenin eksik yönüdür.

Mavi yeşil duvar ve boya rulosunun sanatsal görseli

1.3 Kod örneği

Şimdi Song Ge, Java koduyla simetrik şifreleme ve şifre çözmenin nasıl yapıldığını gösterecek.

Java'da simetrik şifreleme uygulamak için genellikle Java Kriptografi Mimarisi'nin(Java Cryptography Architecture, JCA)sağladığı sınıflar ve arayüzler kullanılır.

Aşağıda AES(Gelişmiş Şifreleme Standardı)algoritmasıyla simetrik şifreleme ve şifre çözmeye ilişkin basit bir örnek verilmiştir:

public class SymmetricEncryptionExample {    // 生成密钥
    public static SecretKey generateKey() throws Exception {     
       KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 可以是128, 192或256位
        return keyGenerator.generateKey();
    }    
    // 加密方法
    public static String encrypt(String data, SecretKey key) throws Exception {      
      Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);       
         byte[] encryptedBytes = cipher.doFinal(data.getBytes());        
         return Base64.getEncoder().encodeToString(encryptedBytes);
    }    
    // 解密方法
    public static String decrypt(String encryptedData, SecretKey key) throws Exception {        
    Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, key);       
         byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));       
          return new String(decryptedBytes);
    }    
    public static void main(String[] args) {        
    try {           
             // 生成密钥
            SecretKey key = generateKey();           
             // 原始数据
            String originalData = "Hello, JavaBoy!";            
            // 加密
            String encryptedData = encrypt(originalData, key);
            System.out.println("加密数据: " + encryptedData);            
            // 解密
            String decryptedData = decrypt(encryptedData, key);
            System.out.println("解密数据: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Anahtar oluştur:Kullanım KeyGenerator Bir AES anahtarı oluşturun。

  2. Şifreleme:Kullanım Cipher sınıfı ile şifreleme yapılır; veriler baytlara dönüştürülüp şifrelenir, ardından depolamayı veya aktarımı kolaylaştırmak için Base64 kodlamasıyla bir dizeye dönüştürülür。

  3. Şifre çözme:Şifrelenmiş dizeyi yeniden baytlara dönüştürün, ardından aynı anahtarı kullanarak şifresini çözün。

Yukarıdaki kodda dikkat etmeniz gereken noktalar şunlardır:

  • Anahtar uzunluğu(örneğin 128 bit)güvenlik gereksinimlerine göre seçilmelidir.

  • Anahtarların güvenli biçimde saklandığından emin olun; anahtarları kodun içine sabit olarak yazmayın.

  • Üretim ortamında daha güvenli bir anahtar yönetimi stratejisi kullanılması değerlendirilmelidir.

Güvenlik gerekçesiyle genellikle anahtar üretmek için yukarıdaki yöntemi kullanırız. Bu yöntemle üretilen anahtarın bir özelliği, sistem her yeniden başlatıldığında değişmesidir. Anahtarın üretimini kendiniz kontrol etmek isterseniz, aşağıdaki şekilde anahtar üretebilirsiniz:

public static SecretKey generateKeyFromPassword(String password, int keySize) throws NoSuchAlgorithmException, InvalidKeySpecException {   
  SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");   
   KeySpec spec = new PBEKeySpec(password.toCharArray(), "salt".getBytes(), 65536, keySize);   
   return new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");
}

Böylece anahtarı kendi ilettiğiniz parametrelerle kontrol edebilirsiniz.

1.4 Ön yüz ile arka yüzün birlikte kullanımı

Farklı diller arasında(JavaScript ve Java gibi)AES algoritmasıyla şifreleme ve şifre çözme yaparken, temel nokta her iki tarafın da aynı anahtarı, algoritma modunu(CBC, ECB vb.), dolgulama modunu(PKCS5Padding, PKCS7Padding vb.)ve başlatma vektörünü(IV, CBC gibi IV gerektiren bir mod kullanılıyorsa)kullanmasını sağlamaktır。

Daha önce bazı arkadaşlar, ön uçta şifreleme yaptıktan sonra arka uçta bir türlü şifreyi çözemediklerini söylemişti. Song ağabeyiniz burada ön uç ile arka ucun birlikte kullanıldığı bir örnek de verecek.

Ön uçta şifreleme, arka uçta şifre çözme

Ön yüz kodu:

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>AES加密示例</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
    </head>
    <body>
    <script>
    function encryptAES(text, secretKey) {        
    const key = CryptoJS.enc.Utf8.parse(secretKey);        
    const iv = CryptoJS.lib.WordArray.random(128 / 8); 
    // 对于CBC模式,需要IV
    
        const encrypted = CryptoJS.AES.encrypt(text, key, {           
         iv: iv,           
          mode: CryptoJS.mode.CBC,            
          padding: CryptoJS.pad.Pkcs7
        });        
        // 返回加密后的文本和IV(Base64格式),实际使用中可能需要安全地传输这些值
        return {          
          ciphertext: encrypted.toString(),          
            iv: iv.toString(CryptoJS.enc.Base64)
        };
    }    
    const secretKey = 'helloworldhelloworldhelloworld11'; /
    / 确保密钥是32个字符长(256位)
    const text = 'Hello, javaboy!';    
    const result = encryptAES(text, secretKey);    
    console.log(result);
    </script>
    </body>
    </html>


Arka uç kodu:

import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;public class AESDecrypt {    public static String decryptAES(String encryptedData, String secretKey, String iv) throws Exception {        IvParameterSpec ivParameterSpec = new IvParameterSpec(Base64.getDecoder().decode(iv));        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "AES");        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);        byte[] decodedValue = Base64.getDecoder().decode(encryptedData);        byte[] decryptedValue = cipher.doFinal(decodedValue);        return new String(decryptedValue, "UTF-8");
    }    public static void main(String[] args) {        try {            //前端加密后的文本
            String encryptedText = "PYANpAjMsRnBIEhovtEXQw==";            String secretKey = "helloworldhelloworldhelloworld11";            //前端 IV,要和加密后的文本一起传到后端
            String iv = "y/jUHcgSOpOiyNlsfjNUBg==";            String decryptedText = decryptAES(encryptedText, secretKey, iv);
            System.out.println("解密文本: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Burada ön uçta şifreleme yapılırken bir iv parametresi üretildiğine dikkat edin; bu parametre, ön uçtaki şifreleme sonucuyla birlikte arka uca iletilmelidir.

Arka uçta şifreleme, ön uçta şifre çözme

Java'da AES şifrelemesi yapıp JavaScript'te şifreyi çözerken de her iki tarafın aynı anahtarı, algoritma modunu (CBC, ECB gibi), dolgulama modunu (PKCS5Padding, PKCS7Padding gibi) ve (uygunsa) aynı başlatma vektörünü (IV) kullandığından emin olmak gerekir.

Arka uç kodu:

public class AESEncrypt {    public static String encryptAES(String plainText, String secretKey, String iv) throws Exception {        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 对于AES-256
        SecretKey secret = new SecretKeySpec(secretKey.getBytes("UTF-8"), "AES");        IvParameterSpec ivParameterSpec = new IvParameterSpec(Base64.getDecoder().decode(iv));        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secret, ivParameterSpec);        byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));        return Base64.getEncoder().encodeToString(encrypted);
    }    public static void main(String[] args) {        try {            String plainText = "Hello, 江南一点雨!";            String secretKey = "helloworldhelloworldhelloworld11"; // 确保密钥是32个字符长(256位)
            String iv = Base64.getEncoder().encodeToString(new byte[16]); // 示例IV,实际应用中应更安全地生成

            String encryptedText = encryptAES(plainText, secretKey, iv);
            System.out.println("Encrypted text: " + encryptedText);
            System.out.println("IV (Base64): " + iv); // 确保将IV发送给解密方

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ön yüz kodu:

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
    <script>
        function decryptAES(ciphertext, secretKey, iv) {            const key = CryptoJS.enc.Utf8.parse(secretKey);            const ivParsed = CryptoJS.enc.Base64.parse(iv);            const decrypted = CryptoJS.AES.decrypt(
                {                    ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
                },
                key,
                {                    iv: ivParsed,                    mode: CryptoJS.mode.CBC,                    padding: CryptoJS.pad.Pkcs7
                }
            );            return decrypted.toString(CryptoJS.enc.Utf8);
        }        const secretKey = 'helloworldhelloworldhelloworld11';        const iv = 'AAAAAAAAAAAAAAAAAAAAAA=='; // 从Java代码获取
        const ciphertext = '1lPNVF1injas78KUWeKp5FusEr6f0pGgcrLAg9ELFr8='; // 从Java代码获取

        const decryptedText = decryptAES(ciphertext, secretKey, iv);        console.log(decryptedText);    </script></head><body></body></html>

Yukarıdaki ön yüz ve arka yüz arasındaki etkileşimde kullanılan şifreleme ve şifre çözme kodlarını Song Ge bizzat test etti; hepsi sorunsuz çalışıyor. Bu tür bir ihtiyacınız varsa yazıyı kaydetmeyi unutmayın, başvuru kaynağı olarak kullanabilirsiniz.

II Asimetrik şifreleme

2.1 Asimetrik şifreleme nedir

Açık anahtarlı şifreleme olarak da bilinen asimetrik şifreleme, iki farklı anahtar (açık anahtar ve özel anahtar) kullanan bir şifreleme yöntemidir.

Genel olarak asimetrik şifrelemenin şu farklı özellikleri vardır:

  1. Açık anahtar ve özel anahtar

  • Açık ve özel anahtarların üretilmesi:Asimetrik şifreleme bir anahtar çifti kullanır. Açık anahtar herkese açıktır ve herkes ona erişebilir; özel anahtar ise gizlidir ve yalnızca anahtarın sahibi ona erişebilir. Bu iki anahtar matematiksel algoritmalarla üretilir ve birbirleriyle ilişkilidir, ancak birinden diğeri türetilemez.

  1. Yüksek güvenlik

  • Kırılması zordur: Açık anahtar ile özel anahtar arasındaki karmaşık matematiksel ilişki nedeniyle asimetrik şifreleme yüksek güvenlik sunar. Saldırganların açık anahtardan özel anahtarı çıkarsaması çok zordur; bu da şifreli verilerin güvenliğini sağlar.

  • Kuantum bilgisayar saldırılarına direnç:Bazı blokzincir projeleri, gelecekte kuantum bilgisayarların oluşturacağı tehdide karşı koymak için eliptik eğri dijital imza algoritmasının(ECDSA)kuantum güvenli varyantları gibi kuantum bilgisayar saldırılarına dirençli şifreleme algoritmaları kullanmaya başlamıştır.

  1. Açık anahtarın dağıtımı kolaydır

  • Açık anahtarın herkese açık olması:Açık anahtar herkesle paylaşılabilir, bu nedenle dağıtımı çok kolaydır。Herkes verileri şifrelemek için açık anahtarı kullanabilir, ancak yalnızca özel anahtarı elinde bulunduran kişi şifreyi çözebilir。

  1. Kimlik doğrulama ve dijital imzalar

  • Kimlik doğrulama:Açık anahtar, kullanıcının kimliğini belirten bir işaret olarak kullanılabilir; başkaları kullanıcının özel anahtarını bilmeden kimliğini doğrulayabilir. Bu, blokzincir gibi merkeziyetsiz ağlarda güvenilir kimlikler oluşturulmasına yardımcı olur.

  • Dijital imza: Özel anahtarın sahibi, özel anahtarı kullanarak bir mesajı imzalayabilir; diğer kişiler ise açık anahtarla imzanın gerçekliğini doğrulayabilir. Bu, mesajın bütünlüğünü ve kaynağının güvenilirliğini sağlar.

  1. Güvenli iletişim

  • Şifreli iletişim: Açık anahtar, mesajları şifrelemek için kullanılabilir; bunları yalnızca ilgili özel anahtara sahip kişi çözebilir. Bu, iletişim sırasında verilerin güvenliğini sağlar ve yetkisiz kişilerin bilgilere erişmesini önler.

  1. Dijital varlık kontrolü

  • Blok zinciri adresi ve özel anahtar: Blok zinciri adresi genellikle açık anahtardan türetilir; kullanıcılar bu adresle ilişkili dijital varlıkları özel anahtarları aracılığıyla kontrol eder. Özel anahtarın güvenliği, dijital varlıkların güvenliği açısından hayati önem taşır.

  1. Şifreleme ve şifre çözme hızı

  • Nispeten yavaştır: Asimetrik şifrelemede şifreleme ve şifre çözme hızı, daha karmaşık matematiksel hesaplamalar gerektirdiği için simetrik şifrelemeye kıyasla çok daha düşüktür. Ancak bu, güvenli iletişim ve kimlik doğrulama gibi alanlarda kullanılmasını engellemez.

2.2 Asimetrik şifrelemenin kullanım alanları

Asimetrik şifrelemenin iki klasik kullanım senaryosu vardır.

  1. Şifreleme:En iyi bildiğimiz kullanım budur; açık anahtarla şifreleme, özel anahtarla şifre çözme.

  2. İmza: Ağın güvenilir olmadığı ve verilerin aktarım sırasında değiştirilebileceği göz önüne alındığında, açık ve özel anahtarların kullanım yönü tersine çevrilebilir: Veriler özel anahtarla imzalanır, imza açık anahtarla doğrulanır; böylece verilerin güvenliği ve bütünlüğü sağlanır.

İkinci kullanım amacını bazı arkadaşlar özel anahtarla şifreleme, açık anahtarla şifre çözme diye ifade ediyor; sonuçta herkes aynı şeyin kastedildiğini biliyor.

Asimetrik şifreleme algoritmaları teoride veri şifreleme ve dijital imza için kullanılabilse de pratikte yüksek hesaplama karmaşıklıkları ve düşük verimlilikleri başlıca engeller hâline gelir.

Simetrik şifreleme algoritmalarıyla karşılaştırıldığında asimetrik şifrelemenin işlem hızı birkaç büyüklük mertebesi daha düşüktür; bu da büyük miktarda veriyi işleme kapasitesini ciddi ölçüde etkiler. Ayrıca asimetrik şifreleme algoritmalarının şifreleme ve şifre çözme süreçleri anahtar uzunluğuyla yakından ilişkili olduğundan ve blok şifreleme kiplerini desteklemediğinden, yalnızca anahtar uzunluğunu aşmayan az miktarda veriyi işleyebilir; büyük miktarda veriyi şifreleyemez.

Asimetrik şifrelemenin performans açısından eksiklerini aşmak için modern şifreleme sistemleri genellikle simetrik ve asimetrik şifrelemenin avantajlarını birleştiren hibrit şifreleme stratejisini kullanır. Bu stratejide asimetrik şifreleme, esas olarak bir simetrik şifreleme anahtarını diğer tarafa güvenli biçimde iletmek (yani “anahtar üzerinde uzlaşma”) için kullanılır. Taraflar bu simetrik anahtarı güvenli biçimde paylaştıktan sonra büyük miktardaki veriyi şifrelemek ve çözmek için verimli simetrik şifreleme algoritmalarını kullanabilir. Bu birleşik yöntem hem şifreleme verimliliğini artırır hem de iletişimin güvenliğini güçlendirir; SSL/TLS gibi çeşitli güvenli iletişim protokollerinde yaygın olarak kullanılır.

Dijital imza alanında, asimetrik şifrelemenin verimliliğini artırmak için de bazı uyarlamalar yapılmıştır. Somut olarak önce özgün verinin özeti alınır (MD5, SHA vb. kullanılabilir) ve sabit uzunlukta bir özet değeri elde edilir. Ardından bu özet değeri asimetrik bir şifreleme algoritmasıyla şifrelenerek dijital imza oluşturulur. Özet algoritmaları herhangi bir uzunluktaki veriyi verimli biçimde sabit uzunlukta bir özete sıkıştırabildiğinden, özgün veri ne kadar büyük olursa olsun özet verisinin uzunluğu aynı kalır ve imzalama süreci de verimliliğini korur. İmza doğrulanırken yalnızca özgün verinin özeti yeniden hesaplanıp şifresi çözülmüş imzayla karşılaştırılarak verinin değiştirilip değiştirilmediği hızla belirlenebilir.

2.3 Şifreleme örneği

Java kodunda RSA ile şifreleme ve şifre çözme örneği:

public class RsaDemo {    public static void main(String[] args) {        try {            KeyPair keyPair = generateRSAKeyPair();            PublicKey publicKey = keyPair.getPublic();            PrivateKey privateKey = keyPair.getPrivate();            String originalData = "Hello, 江南一点雨!";            String encryptedData = encrypt(publicKey, originalData);            String decryptedData = decrypt(privateKey, encryptedData);

            System.out.println("加密后的数据: " + encryptedData);
            System.out.println("解密后的数据: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    public static String decrypt(PrivateKey privateKey, String encryptedData) throws Exception {        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));        return new String(decryptedBytes);
    }    public static String encrypt(PublicKey publicKey, String data) throws Exception {        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);        byte[] bytes = cipher.doFinal(data.getBytes());        return Base64.getEncoder().encodeToString(bytes);
    }    public static KeyPair generateRSAKeyPair() throws NoSuchAlgorithmException {        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048); // 可以指定密钥长度,如2048位
        return keyGen.generateKeyPair();
    }
}

2.4 Ön uç ve arka ucun birlikte kullanımı

Ön uçta şifreleme, arka uçta şifre çözme

Arka yüz kodu yukarıdaki örnekle aynıdır; fark şu ki açık anahtarı aldıktan sonra onu yazdırabiliriz. Bu açık anahtar daha sonra ön yüze aktarılacaktır:

public static void main(String[] args) {    try {        KeyPair keyPair = generateRSAKeyPair();        PublicKey publicKey = keyPair.getPublic();        PrivateKey privateKey = keyPair.getPrivate();
        System.out.println("公钥: " + Base64.getEncoder().encodeToString(publicKey.getEncoded()));        String originalData = "Hello, 江南一点雨!";        String encryptedData = encrypt(publicKey, originalData);        String decryptedData = decrypt(privateKey, encryptedData);
        System.out.println("加密后的数据: " + encryptedData);
        System.out.println("解密后的数据: " + decryptedData);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Ön uç kodu aşağıdaki gibidir:

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RSA Encryption Example</title>
    <!-- 引入jsencrypt库 -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/bin/jsencrypt.min.js"></script></head><body><script>
    // 重写前端加密方法
    function encryptData(publicKey, data) {        // 创建一个新的JSEncrypt对象
        var encryptor = new JSEncrypt();        // 设置公钥
        encryptor.setPublicKey(publicKey);        // 加密数据
        var encrypted = encryptor.encrypt(data);        return encrypted;
    }    // 示例公钥(实际使用时应该替换为服务器提供的公钥)
    var publicKey = `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnP5FOXIghidLDE2FgFwzi4Y+qTdYjnc0eMoiL5i4gdOeTE+7Uu9YvDB51GcBWKD9lvmZr5rX8z0OBpwe526qsTekNpXoIVk9DB34US0HOrAXEEwpUTVuSR656cJGAwmWBkVaalQynEz4Dlzrm53zExVYueruYUuzFyuZDaQcFnl3rWUH/XDkCIe23z0R1TfT3Q2OYNKft0u56r0S/ko99utXuYJK9yowe7QGT6q4cSJwsITQTomCARAq9q+bSNuGEYa4FlYCKIKWIhKbMhz0FYIMB2fJN10GyZbbvKASqeMkuCoD2Efgd8/6uMwOaMcx9LgEkcFaQ3qgDutsPXNUswIDAQAB`;    // 要加密的数据
    var data = 'Hello, javaboy!';    // 调用加密方法
    var encryptedData = encryptData(publicKey, data);    // 输出加密后的数据
    console.log('Encrypted Data:', encryptedData);</script></body></html>

Arka uçta şifreleme, ön uçta şifre çözme

Verileri Java'da RSA algoritmasıyla şifreleyip JavaScript'te çözmek, sunucunun ön yüzün açık anahtarıyla şifreleme yapması ve ön yüzün kendi özel anahtarıyla şifreyi çözmesi anlamına gelir. Bu senaryoda ön yüzün özel anahtarı kolayca çalınabileceğinden bu kullanım önerilmez. Bu yüzden örnek de vermeyeceğim.

Pekâlâ, arkadaşlar, simetrik ve asimetrik şifreleme üzerine bir kez daha sohbet ettik. Yukarıdaki örnek kodların hepsi Song Ge tarafından başarıyla test edildi; bunları referans olarak kullanabilirsiniz.


Yorumlar

Gönderiliyor

Temanızı seçin

Temanız tüm sitede geçerli olur.