C # ve PHP, ColdFusion, Ruby, Python arasında uyumlu şifreleme

8 Cevap

Biz bir POST isteği kabul edecek bir hizmet geliştiriyoruz, ve bir form üzerinde gizli alanlarda saklanır gibi POST bazı verileri POST önce Encypted gerekir.

Uygulama C # ile yazılmış ama biz üçüncü parti istemciler kolayca ile entegre edebilmek istiyorum. Biz çoğu müşteri PHP, Klasik ASP veya VB.Net kullanmak bulabilirsiniz.

Üçüncü partiler sadece şifreleme yapıyor olması gerektiğini ve hiçbir iki yönlü iletişim var şifresinin yapardım.

Şifreleme algoritması, dolgu modu ve diğer seçenekleri en uyumlu kombinasyonlar nelerdir?

8 Cevap

Eğer bir anahtar paylaşımı güvenli bir yol var olduğunu varsayarsak (ister o RSA şifreleme, bir SSH veya HTTPS bağlantısını ya da güvenli bir telefon hattı üzerinde diğer geliştirici callling üzerinde alma), AES gibi büyük, modern şifreleme herhangi (belirtildiği gibi @ ile Ed Haber) uygun olacaktır. Ben ikinci AES önerisini olur. Vb PHP, VB, Ruby, kütüphaneler olmalı

Ancak, "iki yönlü iletişim" güvenli şifreleme tarafa simetrik anahtarı almak için bir out-of-kanal yöntem bulmak zorunda kalacaktır ile unutmayın.

Üçüncü tarafların verilerin şifresini çözmek için imkansız olması gerektiği anlamına, o zaman RSA gibi bir asimetrik şifreleme algoritması kullanmak isteyeceksiniz. Bu genel anahtarı ile verileri şifrelemek için, ve sonra sadece size ifşa etmeyin sizin özel anahtara sahip verilerin şifresini çözebilir üçüncü taraf olacaktır. Eğer bahsedilen tüm diller için geçerli RSA uygulamaları olmalıdır.

Üçüncü taraf verilerin şifresini çözebilir eğer umurumda değil, o AES gitmek için yoludur. Eğer üçüncü taraflarla paylaşmak bir anahtar olacaktır. Bu anahtar hem şifreleme ve şifre çözme için kullanılır.

Ed Haber said

I would use AES for the bulk data encryption and RSA for encrypting the AES Key. If the data is small enough then just encrypt the whole thing with RSA.

Ben bu iyi bir çözüm olduğunu düşünüyorum. Ne yapacağını uygulama bir kamu RSA anahtarı almak için bir API yayınlamak olması. Ben üçüncü taraf sana bir şey göndermek istiyor zaman kamu anahtarını alır. Daha sonra bir blok şifreleme (yani AES) kullanarak gerçek şifreleme yapmak için bir oturum anahtarı üretir, ve açık anahtarı ile şifreleyerek size anahtarı gönderir. Size özel anahtar ile oturum anahtarını şifresini. Üçüncü taraf o (da yayınlamak bir dolgu şemasını kullanarak) AES ile göndermek istiyor ve size gönderir verileri şifreler. Siz oturum anahtarını kullanarak şifresini.

Yukarıdaki yöntem ile bazı sorunlar vardır. Eğer kamu anahtarını yayınlayarak dışında herhangi bir bilgi (göndermiyor olduğundan, oturum anahtarı oluşturulur nasıl kontrol edemez. Bu üçüncü taraflar, oturum anahtarını üreten çok güvensiz yollar kullanabilir ve asla bilmek anlamına gelir. Ikinci sorunu size veri göndermek isteyen herkes Yani emin her biri koordine. İkinci sorun büyük değil yapmak zorunda olacak, ancak ilk bir sorun olabilir. yapmanız aynı şekilde AES pad veri zorundadır Eğer iyi bir şifreli olarak güvenli rasgele sayı üreteci gerçekten iyi bir oturum anahtarlarını oluşturmak için üçüncü taraflara çok fazla güvenmiyorum özellikle

Çok kolayca kendi XOR anahtar tabanlı bit şifreleme uygulamak. Biraz düşünce ve marifet ile, size uygulama için uygun daha bulunuyor şey gelebilir.

Burada bir PHP örnek:

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}

ColdFusion şifrelemek sahiptir ve yukarıda önerilen AES dahil algoritmalar ve kodlamaları bir dizi taşıma kapasitesine sahip işlevlerini şifresini.

At Bilgi: http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

Hızlı bir örnek kod:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

Similar functionality is available with this library for PHP:
http://www.chilkatsoft.com/p/php_aes.asp

...and Java, Python, Ruby, and others...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

RSA sizin için algoritma gibi geliyor.

Neden sunucu HTTPS değil? Bu şekilde, HTTPS işleyebilir herhangi bir istemci güvenli hizmeti tüketebilir.

Ben sadece son zamanlarda SHA-256 kullanılarak Coldfusion PHP şifrelenmiş bir GET değişkeni bağlı bir uygulama tamamladı.

Coldfusion kodu:

<cfset var strHash = Hash(arguments.hashstring,"SHA-256") />

PHP kodu:

hash('sha256', $strKey);

C # bir şey işlemek mümkün olacağını varsayıyorum olanlar giderdi, oldukça olgun bir dil gibi. İşte SHA256 sınıf için MSDN web sitesinden bir örnek:

byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA256 shaM = new SHA256Managed();
result = shaM.ComputeHash(data);

İşte MSDN link: SHA256 Class