2008-09-19 33 views
7

Chúng tôi đang phát triển một dịch vụ sẽ chấp nhận yêu cầu POST. Một số dữ liệu POST sẽ cần được mã hóa trước POST vì dữ liệu sẽ được lưu trữ trong các trường ẩn trên biểu mẫu.Mã hóa tương thích giữa C# và PHP, ColdFusion, Ruby, Python

Ứng dụng được viết bằng C#, nhưng chúng tôi muốn khách hàng của bên thứ ba có thể dễ dàng tích hợp với ứng dụng này. Chúng tôi thấy rằng hầu hết các khách hàng sử dụng PHP, ASP cổ điển hoặc VB.Net.

Các bên thứ ba chỉ nên thực hiện việc mã hóa. Chúng tôi sẽ giải mã. Không có giao tiếp hai chiều.

Kết hợp tương thích nhất của thuật toán mã hóa, chế độ đệm và các tùy chọn khác là gì?

Trả lời

4

Giả sử rằng bạn có một cách an toàn chia sẻ một chìa khóa (cho dù RSA mã hóa của nó, thu hồi trên một SSH hoặc liên kết HTTPS hoặc kêu gọi nhà phát triển khác trên một đường dây điện thoại bảo mật), bất kỳ bộ mã hóa hiện đại nào lớn (như AES, như được đề cập bởi @Ed Haber) sẽ phù hợp. Tôi sẽ thứ hai đề xuất của ông về AES. Nên có các thư viện cho PHP, VB, Ruby, v.v.

Tuy nhiên, hãy nhớ rằng với "không có giao tiếp hai chiều", bạn sẽ phải tìm phương pháp ngoài kênh để nhận khóa đối xứng để mã hóa buổi tiệc.

0

Âm thanh như RSA là thuật toán cho bạn.

2

Tôi sẽ sử dụng AES để mã hóa dữ liệu hàng loạt và RSA để mã hóa khóa AES. Nếu dữ liệu đủ nhỏ thì chỉ cần mã hóa toàn bộ nội dung bằng RSA.

-3

Tôi vừa mới hoàn thành một ứng dụng đã kết nối biến GET được mã hóa từ Coldfusion với PHP bằng SHA-256.

đang Coldfusion:

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

mã PHP:

hash('sha256', $strKey); 

tôi cho rằng C# sẽ có thể xử lý một cái gì đó mà những người sẽ, vì nó là một ngôn ngữ khá trưởng thành. Dưới đây là một ví dụ từ trang web MSDN cho lớp SHA256:

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

Đây là liên kết MSDN: SHA256 Class

+2

Hashing không mã hóa. g là một chiều, và không thể (tốt, không thể) được hoàn tác cho một chi phí tính toán hợp lý. –

3

Nếu bạn có nghĩa là các bên thứ ba không thể giải mã dữ liệu, thì bạn sẽ muốn sử dụng thuật toán mã hóa không đối xứng như RSA. Điều này sẽ giúp bên thứ ba mã hóa dữ liệu bằng khóa công khai của bạn và sau đó chỉ bạn mới có thể giải mã dữ liệu bằng khóa riêng của mình mà bạn không tiết lộ. Cần phải triển khai RSA cho tất cả các ngôn ngữ bạn đã đề cập.

Nếu bạn không quan tâm liệu bên thứ ba có thể giải mã dữ liệu hay không, thì AES là cách để thực hiện. Bạn sẽ có một chìa khóa mà bạn chia sẻ với các bên thứ ba. Khóa này được sử dụng cho cả mã hóa và giải mã.

1

Bạn có thể dễ dàng triển khai mã hóa bit dựa trên khóa XOR của riêng bạn. Với một chút suy nghĩ và sự khéo léo, bạn có thể nghĩ ra điều gì đó phù hợp hơn với ứng dụng của bạn.

Dưới đây là một ví dụ PHP:

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; 
} 
1

ColdFusion có mã hóa và giải mã các chức năng khả năng xử lý một loạt các thuật toán và mã hóa, bao gồm AES đề nghị trên.

thông tin tại địa chỉ: http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

nhanh mã ví dụ:

Key = generateSecretKey('AES' , 128) 

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

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

chức năng tương tự có sẵn với thư viện này cho PHP:
http://www.chilkatsoft.com/p/php_aes.asp

... và Java, Python, Ruby, và những người khác ...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

2

Ed Haber said

Tôi sẽ sử dụng AES cho mã hóa dữ liệu số lượng lớn và RSA để mã hóa các AES Key. Nếu dữ liệu đủ nhỏ thì chỉ cần mã hóa toàn bộ nội dung với RSA.

Tôi nghĩ đây là giải pháp tốt. Những gì tôi sẽ làm là yêu cầu ứng dụng của bạn xuất bản API để nhận khóa RSA công khai. Khi bên thứ ba muốn gửi cho bạn thứ gì đó, nó sẽ nhận khóa công khai. Sau đó nó tạo khóa phiên để thực hiện mã hóa thực tế bằng cách sử dụng một thuật toán mã khối, (tức là AES) và gửi khóa cho bạn bằng cách mã hóa bằng khóa công khai của bạn. Bạn giải mã khóa phiên bằng khóa cá nhân của bạn. Bên thứ ba sau đó mã hóa dữ liệu mà nó muốn gửi cho bạn với AES (sử dụng lược đồ đệm mà bạn cũng xuất bản) và gửi nó cho bạn. Bạn giải mã nó bằng cách sử dụng khóa phiên.

Có một số vấn đề với phương pháp ở trên. Vì bạn không gửi bất kỳ thông tin nào (ngoài việc xuất bản khóa công khai của mình, bạn không thể kiểm soát cách khóa phiên được tạo. Điều này có nghĩa là các bên thứ ba có thể sử dụng các cách rất không an toàn để tạo khoá phiên và bạn sẽ không bao giờ biết. là tất cả những ai muốn gửi cho bạn dữ liệu phải đệm dữ liệu cho AES theo cùng cách bạn làm. Vì vậy, bạn sẽ phải đảm bảo mọi điều phối hợp. Vấn đề thứ hai không phải là lớn, nhưng vấn đề thứ nhất có thể là một vấn đề đặc biệt là nếu bạn không tin tưởng bên thứ ba tất cả những gì tạo ra các khóa phiên thực sự tốt từ một trình tạo số ngẫu nhiên mã hóa an toàn tốt

0

Tại sao máy chủ của bạn không thể truy cập HTTPS?

Các vấn đề liên quan