2 haftadır sunucu ve mobil cihazlar arasındaki şifreleme işlemine kafa yoruyorum ve böyle birşey için bir geliştiricinin önündeki temel sorun tam olarak şöyle : "Hem bütün platformlarda çalışsın hem de düzgün ve uyumlu şifrelesin" :) Şimdilik Android ve IIS arasında bu olayı hallettim.

 

 

 

 

 

 

 

 

 

 

Uygulamanın android java kısmı :

Gerekli importlar

       import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;

     String key = "abc122**"; // secret key'iniz
     byte[] keyBytes = key.getBytes();
     SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "DES");

     String iv = "321cba**"; // vector byte'larınız
     byte[] ivBytes = iv.getBytes();
     IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);

     try {
           Cipher cipher = Cipher.getInstance("DES");
           cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
                           
           byte[] encrypted = cipher.doFinal(parameter.getValue().getBytes());

           String encryptedBase64 = Base64.encodeBytes(encrypted);
      } catch (Exception e) {
           e.printStackTrace();
      }

ve C# ASP.NET kısmı

       byte[] keyBytes = Encoding.UTF8.GetBytes("abc123**"); // secret key
    byte[] ivBytes = Encoding.UTF8.GetBytes("321cba**"); // initialization vector

    byte[] dataBytes = Convert.FromBase64String(cryptedString);

    System.Security.Cryptography.DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
    cryptoProvider.Mode = CipherMode.ECB;
    MemoryStream memoryStream = new MemoryStream(dataBytes);
    CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(keyBytes, ivBytes), CryptoStreamMode.Read);
    StreamReader reader = new StreamReader(cryptoStream);

       string decryptedString = reader.ReadToEnd();

Bu işlemler sırasında dikkat etmeniz gereken iki husus var. Birincisi şifrelenmiş veriyi diğer tarafa Base64 formatında taşımanız ve taşırken aynı zamanda URLEncode işlemine sokmanız. Eğer bunu yapmazsanız hem URL safe olmayan karakterlerle baş edemiyorsunuz hem de veride bozuklık oluyor. Defalarca denemeden sonra Base64 işimi çözdü şükür ki. Diğer husus ise .NET tarafında Mode property'sinin ECB olarak set edilmesi çünkü Java şifrelerken .NET tarafında bu profile uygun şifreliyor. Buna da saatlerimi harcadım malesef :) Neyseki şükür bu da çözüldü :) Sevgiler.


Add comment

  Country flag


  • Comment
  • Preview
Loading