11 Ağustos 2017 Cuma

PGP

gpg --list-keys
To list defined public keys on the system

gpg --list-secret-keys
To list defined private keys on the system

gpg --import COMPANY.sec
To import private key

gpg --import public_key.asc
To import public key for partner

gpg --encrypt example.txt
To encrypt the file, output as example.pgp

gpg  --output example.txt  --decrypt example.gpg
To decrypt the file example.pgp, output as example.txt

gpg --edit-key <KEY> trust
or
gpg --edit-key (ID of partner key)
Choose ultimate trust.
To give permission to use pgp keys for every files.

Note: Every user has its own gpg keyring so everyone should import their own keys

Related Source: http://www.spywarewarrior.com/uiuc/gpg/gpg-com-4.htm

5 Mayıs 2017 Cuma

Integer bir değerin String değere çeviren algoritma



Girilen sayının %10 u yani mod 10 da diyebiliriz sanıyorum, kalanlar sırasıyla 1,9,8,7,6,5,4,3,2,1 rakamlar olacaktır. Bunları String bir değerde peş peşe tutarsak "1987654321" olacaktır. Bu String değerinin ise yine tersini almalıyım ki ilk girilen rakamın string halini bulmuş olayım. Bunun için String değerin 0.index ini en son index'e , en son index'i ise en baştaki 0. indexe atmalıyım, şeklinde bir algoritma üretebiliriz.

Not: Java'da reverse alabilen farklı algoritmalar mevcut, ör: StringBuilder("...değer ..").reverse().


  • Bir public main class içinde aşağıdaki kodları uygulayalım;


public static void main(String[] args) {

int input =1234567891;

String result =  numberToString(input);
System.out.println("numberToString=" + result);
}

public static String numberToString(int num) {
String result = "";
String stringValue = null;
while (num > 0) {
int rem = num % 10;

result += rem;
num = num / 10;
}
System.out.println("Reverse:" + result);
stringValue = reverse(result);
              //new StringBuilder(result).reverse().toString(); kullanılabilir.
  
return stringValue;
}


  • String bir değerin harflerini /indexler üzerinden, Reverse methodunu birden farklı şekilde olabilir, araştırdıklarımdan sadece 2 tanesini vereceğim.

1. Yöntem;
public static String Reverse(String input) {
char[] in = input.toCharArray();
int begin = 0;
int end = in.length - 1;
char temp;
while (end > begin) {
temp = in[begin];
in[begin] = in[end];
in[end] = temp;
end--;
begin++;
}
return new String(in);
}

2.Yöntem daha kısa kod, recursive algoritma şeklinde;

"1987654321" string değerinin

  • 0.index'i 1
  • 1.index' ise 9 dur gördüğünüz üzere.Öyle bir algoritmam olsun ki , bir döngü içinde ilk indexi alıp (charAt(0) fonksiyonu) ,ilk index'ten sonraki kalan değerini alsın (substring(1) fonksiyonu) ve en sonuna yazsın, En sondaki index olan "1" değerini de attıktan sonra döngüden çıksın. Şahsen az beynim yanmadı desem ilk başta yalan olur:)



public static String reverse(String s) {
if (s.length() <= 1) {
return s;
}
return reverse(s.substring(1))   +    s.charAt(0);
}

21 Aralık 2016 Çarşamba

Encryption/Decryption ve SSL - Bölüm 2 : Çift Yönlü Şifreleme

Çift Yönlü Şifreleme  (Two Way Encryption)


Bir mesaj (metin, bilgi vs.) bir anahtar (key) vasıtasıyla şifrelenip gönderilir, mesajı alan karşıdaki taraf da bir anahtar ile şifresi çözümler. Aynı işleyişle, karşı taraf da bize bir mesaj gönderirken şifreler, biz de şifreli mesajı bir anahtar kullanarak çözümleriz.  Simetrik ve Asimetrik şifreleme olarak ikiye ayrılmaktadır.  (Symmetric and Asymmetric Encryption)

1. Simetrik Şifreleme

   Simetrik şifreleme, mesajı şifreleyip gönderirken gizli bir anahtar kullanılır ve tektir. Karşının şifreyi çözmesi içinde yine aynı anahtarı kullanması demektir (Şekil-1). Şifrelemede kullanılan bu gizli ve tek anahtar mesajlaşmak istenen kişiyle paylaşılır (shared key).  Tek bir anahtar olduğundan çok iyi saklanması gerekir, çünkü üçüncü taraflarca ele geçirilirse her iki taraf içinde güvenliği kaybeder. 

Şekil 1.  Bir metnin, gizli anahtar ile şifrelenip şifreli metin oluşturulması ve tekrar gizli anahtar ile şifre çözülmesi.


    Simetrik anahtarın en önemli güzelliği güvenliğin çok iyi sağlamak olmasına rağmen,  en zayıf yanı karşı tarafa güvenli ulaştırmak ve bu gizli anahtarın her iki tarafında güvenli olarak saklamaları gerekir. Sonuç olarak;

  • Shared Key'in üçüncü kişiler tarafından şifreye erişmeleri büyük risk oluşturması,
  • Çok kullanıcılı uygulamalarda, her kullanıcıya gizli anahtar verilmesi oldukça zahmetli ve riskli olması,
  • Anahtarın karşı taraflara güvenli bir yoldan ulaştırabilmeyi sağlamak adına 
yeni bir yöntem geliştirilmiştir, herkese açık genel bir anahtar üretmek. Bu da "Asimetrik şifreleme"dir.

2. Asimetrik Şifreleme

    Bu yöntemle herkese dağıtabileceğimiz genel bir anahtar üretilerek, gizli anahtarın (private key) dağıtımı problemi çözülmüştür.  İşleyişi; mesajı şifreleyen taraf genel - açık anahtarı kullanarak şifreler (public key encryption), ama şifreyi sadece gizli anahtar açabilmektedir. Bu anahtar da mesajı alacak kişide bulunur ve iyi şekilde saklanması gerekir. 

Açık anahtar ve gizli anahtar birbirinden farklı integer bir asal sayılardır.



     Asimetrik şifreleme yöntemi ile, kullanıcılara dağıtılacak anahtar fazlalığı durumu kalmış olur, ama hangi açık anahtarın kime ait olduğundan emin olunması gerekir. Bu kimlik konusu için de sertifikalar kullanılmaktadır. Sertifika, açık anahtar ile sahibinin arasındaki bağlantının belgesidir. Gizli anahtar (private key) sadece şifreyi çözecek kişide bulunur. 

     Sonuç olarak; asimetrik şifreleme daha uzun sürede şifre çözülür ama bunun yanında da güvenlik açısından simetrik şifrelemeye göre daha başarılıdır.


Bilinmesi faydalı terimlerin ingilizce karşılıkları

  • Gizli /özel anahtar     :  Private key / secret key
  • Tek anahtar                :  Single key
  • Şifreli mesaj/metin    :  Ciphertext
  • Düz metin/mesaj       :  Plaintext
  • Açık anahtar              : Public key