Khám phá XML Encryption (mã hóa XML), Phần 2

Thực thi một cơ chế Mã hóa XML

Trong phần cài đặt lần thứ 2 này, Bilal Siddiqui kiểm tra mô hình sử dụng của Mã hóa XML với sự hỗ trợ của một tình huống sử dụng cụ thể. Ông giới thiệu một ứng dụng dùng thử, giải thích cách nó sử dụng thực thi Mã hóa XML. Sau đó, ông tiếp tục với thực thi cuối cùng của Mã hóa XML và sử dụng các lớp JCA/JCE để hỗ trợ mã hóa. Cuối cùng, ông thảo luận vắn tắt về các ứng dụng của Mã hóa XML trong các dịch vụ Web dựa trên SOAP.

Bilal Siddiqui , Chủ tịch HĐQT

Tư vấn viên XML: Bilal Siddiqui đã nhận được bằng Kỹ sư Điện tử của trường Đại học Kỹ sư và Công nghệ, Lahore, Pakistan năm 1995. Sau đó ông bắt đầu thiết kế các giải pháp phần mềm cho các hệ thống quản lý công nghiệp. Và rồi ông lại chuyển sang XML và sử dụng kinh nghiệm lập trình C++ của mình để xây dựng các công cụ xử lý XML dựa vào Web và WAP, các giải pháp phân tích bên cạnh máy chủ, và các ứng dụng dịch vụ. Bạn có thể liên hệ với ông theo địa chỉ wap_monster@yahoo.com.



08 01 2010

Trong Phần 1 của loạt bài này, tôi đã giới thiệu về Mã hóa XML, cú pháp cơ bản của nó và quá trình xử lý. Tôi đã kiểm tra các thẻ khác nhau và cách dùng của chúng trong Mã hóa XML với một ví dụ đơn giản về cách trao đổi an toàn dữ liệu cấu trúc đưa ra một Java API cho Mã hóa XML dựa trên DOM, và đưa ra một bản tổng quan ngắn gọn về mã hóa trong Java (JCA/JCE).

Tôi bắt đầu bài thảo luận của mình ở phần này với một tình huống trao đổi thông tin, minh họa cho việc sử dụng mã hóa XML.

Tình huống trao đổi thông tin

Xem xét quá trình trao đổi thông tin giữa hai bên doanh nghiệp. Một là nhà bán sách trực tuyến và bên kia là nhà xuất bản. Khi nhà bán sách trực tuyến muốn mua sách, họ gửi một yêu cầu mua tới nhà xuất bản. Ở phía bên nhà xuất bản, phòng bán hàng nhận yêu cầu này, xử lý nó, và chuyển tới phòng kế toán. Hai doanh nghiệp trao đổi thông tin theo dạng thức các tài liệu XML. Bởi vì một phần tài liệu cần phải được bảo mật và phần còn lại có thể không, mã hóa XML là cách tự nhiên để áp dụng bảo mật cho các lựa chọn riêng biệt của tài liệu.

Theo chính sách bảo mật của nhà bán sách, thông tin thanh toán sẽ chỉ được thông báo cho phòng kế toán. Phòng bán hàng sẽ chỉ cần trích xuất ra tên sách, ID của sản phẩm và số lượng yêu cầu; bởi vì đây là thông tin không nhạy cảm, nó có thể không cần phải giữ bí mật. Phòng kế toán sẽ cần giải mã thông tin thanh toán trong yêu cầu mua sử dụng khóa bí mật đã được trao đổi trước. (Chú ý rằng Mã hóa XML chỉ là mã hóa và giải mã các thông tin có cấu trúc và không đặt ra bất cứ phương thức trao đổi khóa nào cụ thể cả.) Theo chính sách này, Mã hóa XML tạo điều kiện cho việc giấu đi thông tin thanh toán ở phòng bán hàng và giải mã ra khi đến phòng kế toán.

Bảo mật dựa trên tài liệu

Tại thời điểm này, sẽ hữu ích để ta suy nghĩ một chút về khái niệm bảo mật dựa trên tài liệu. Với kiến trúc bảo mật này, bạn có thể đặt bảo mật ở mức độ tài liệu. Ngữ cảnh của một phiên bảo mật được bảo vệ một cách hiệu quả bên trong tài liệu bảo mật. Tất cả các thông tin mà một bên có thẩm quyền có thể cần để giảm mã tài liệu đều có sẵn trong tài liệu đó. Một phiên bảo mật mang tính logic được tạo ra, nó linh hoạt, tồn tại một cách lâu dài và cho phép nhiều bên cùng tham gia vào một phiên giao dịch bảo mật. Một giao thức sắp tới cho các dịch vụ Web, Giao thức Giao dịch Thương mại (BTP -- xem Tài nguyên), dựa trên cùng một khái niệm về duy trì ngữ cảnh của một phiên bên trong tài liệu giao dịch; điều này giúp cho giao dịch được lâu dài và đảm bảo được tính linh hoạt.


Ứng dụng dùng thử

Để hoàn tất các yêu cầu của tình huống trao đổi dữ liệu bảo mật giữa nhà xuất bản và nhà bán sách ở phía trên, tôi đã tạo ra một lớp ứng dụng dùng thử được gọi là demoXmlEncApp (xem Ví dụ 1). Lớp này sử dụng lớp thực thi mẫu Mã hóa XML XmlEncryption (xem Ví dụ 2).

Ứng dụng dùng thử làm được những gì

Phương thức main của lớp demoXmlEncApp ban đầu thực hiện việc xử lý bên phía nhà bán sách bằng cách gọi phương thức simulateBookSellersEnd, phương thức này đọc tệp XML yêu cầu mua, Order.xml (xem Ví dụ 3), và mã hóa thông tin nhạy cảm trong đó thông qua một trong ba phương thức mã hóa (đó là mã hóa tệp XML trọn vẹn, mã hóa phần tử, hay mã hóa nội dung phần tử) được chỉ định trong Mã hóa XML. Sau đó nó lưu tệp XML đã được mã hóa vào ổ đĩa, cũng như là khóa được sử dụng để mã hóa.

Ví dụ 3. Order.xml
<?xml version="1.0"?>
<!-- This Listing provides the sample XML File that will be encrypted. -->
<purchaseOrder>
	<Order>
		<BookName>Soccer For Dummies</BookName>
		<Id>123-958-74598</Id>
		<Quantity>500</Quantity>
	</Order>
	<Payment>
		<CardNo>4502-3456-3278-2011</CardNo>
		<CardType>VISA</CardType>
		<ValidDate>12-10-2004</ValidDate>
	</Payment>
</purchaseOrder>

Bởi vì các giao thức trao đổi tệp và trao đổi khóa không phải là trọng tâm ở đây, vì thế tôi giả thiết rằng chúng được tạo ra sẵn cho nhà xuất bản thông qua bất cứ phương thức thích hợp nào đó (Ví dụ, tệp XML đã được mã hóa và khóa bí mật được trao đổi thông qua HTTP và một số thuật toán mã hóa khóa công khai tương ứng). Phương thức main sau đó lấy vai trò của nhà xuất bản bằng cách gọi phương thức simulatePublishersEnd, phương thức này sẽ lấy ra các thông tin phòng bán hàng cần, và sau đó hiển thị tệp XML trên bảng điều khiển. Tiếp đến, nó giải mã thông tin thanh toán cho phòng kế toán và hiển thị nó ở bảng điều khiển.

Hàm simulateBookSellersEnd trong lớp demoXmlEncApp ban đầu minh họa một đối tượng XmlEncryption và gọi các phương thức thiết lập khác nhau của XmlEncryption để thiết lập các thuộc tính sau:

  • clearDoc: Dạng đối tượng DOM của tệp XML (xem Ví dụ 3) được mã hóa
  • encKey: Một khóa được sử dụng cho việc mã hóa
  • algoName: Tên của thuật toán mã hóa
  • keyName: Tên của khóa mã hóa; tên này trở thành giá trị của nút văn bản con của phần tử KeyName trong suốt quá trình mã hóa XML như được giải thích trong phần 1
  • encId: Tên được đặt cho thẻ EncryptedData là duy nhất trong tài liệu

Phương thức simulateBookSellersEnd của lớp demoXmlEncApp gọi các phương thức khác nhau của bộ máy Mã hóa XML (Lớp XmlEncryption) phụ thuộc vào các đối số dòng lệnh được gán trong khi gọi ứng dụng. Hãy xem điều gì xảy ra bên trong lớp XmlEncryption, bộ máy xử lý Mã hóa XML chính.


Các chi tiết của việc thực thi Mã hóa XML

Tôi đã giới thiệu một phần API mã hóa XML đã được đặt ra trong phần 1. Hãy nhớ lại rằng tôi đã có một phương thức gọi là encryptCompleteXmlFile trong lớp XmlEncryption (xem Ví dụ 11 của phần 1) để mã hóa một tệp XML hoàn chỉnh. Cùng với phương thức encryptCompleteXmlFile, bây giờ tôi đã thêm hai phương thức sau để phục vụ các yêu cầu mã hóa các loại dữ liệu khác nhau (phân tách mã hóa):

  • encryptElementOfXmlFile để mã hóa một phần tử đặc biệt trong tệp XML
  • encryptElementContentOfXmlFile để mã hóa nội dung của một phần tử đặc biệt trong tệpXML

Nhà bán sách có thể bảo mật thông tin nhạy cảm trong yêu cầu mua bằng cách áp dụng bất cứ một trong ba phương thức mã hóa XML của lớp XmlEncryption :

  1. Mã hóa một tệp XML hoàn chỉnh
  2. Mã hóa một phần tử trong một tệp XML
  3. Mã hóa nội dung của một phần tử trong tệp XML

1. Mã hóa một tệp XML hoàn chỉnh với Mã hóa XML

Nhà bán sách có thể mã hóa toàn bộ tệp Order.xml để có một tệp XML mã hóa, có thể gửi tới phòng bán hàng của nhà sản xuất. Mặc dù cách này cung cấp bảo mật tương tự thông qua liên kết giao tiếp đầu cuối - đầu cuối, nhưng chính sách bảo mật của nhà bán sách đã bị ảnh hưởng. Chính sách này yêu cầu giấu đi thông tin thanh toán trong phòng bán hàng và hiển thị nó trong phòng kế toán. Trong trường hợp này, toàn bộ tài liệu XML được giải mã bởi phòng bán hàng và thông tin thanh toán được hiển thị. Vì thế, phương thức này dường như chưa hợp lý, mặc dù nó có thể rất thực tế nếu bạn sử dụng siêu mã hóa (đề cập sau trong bài hướng dẫn này).

Nếu nhà bán sách quyết định mã hóa toàn bộ tệp Order.xml , hàm simulateBookSellersEnd trong lớp demoXmlEncApp tạo ra một lệnh gọi tới phương thức công khai encryptCompleteXmlFile của lớp XmlEncryption.

Phương thức này đầu tiên gọi một phương thức riêng getString để sắp xếp tệp XML mã hóa nó theo dạng chuỗi. Sau đó, nó gọi phương thức mã hóa getEncryptedData, trả lại xâu ký tự mã hóa đã được mã hóa cơ số 64. Xâu ký tự mã hóa này sau đó được gán cho phương thức riêng getCipherDataDoc . Phương thức này tạo ra và trả lại thẻ CipherData với thẻ con CipherValue giữ xâu ký tự mã hóa đã được mã hóa cơ số 64. Tương tự các thẻ EncryptionMethodds:KeyInfo được tạo ra. Ba thẻ này -- đó là CipherData (mang thẻ con của nó là CipherValue ), EncryptionMethod, và ds:KeyInfo -- được sau đó thêm vào như là các thẻ con của thẻ EncryptedData. Thẻ EncryptedData thực sự được nạp vào đối tượng tài liệu DOM, encDataObj, nó được sắp xếp và trả lại phương thức simulateBookSellersEnd .

2. Mã hóa một phần tử trong một tệp XML với Mã hóa XML

Nhà bán sách có thể mã hóa phần thông tin thanh toán của tệp XML với khóa bí mật của phòng kế toán, và giải mã phần nội dung còn lại của tệp cho phòng bán hàng xem. Quá trình xử lý này có thể được thực hiện bằng cách mã hóa phần tử Payment trong tệp Order.xml. Thông tin thẻ tín dụng được bảo mật vì nó ở trong các nút con của phần tử mã hóa Payment. Bởi vì yêu cầu bảo mật yêu cầu rằng các phương tiện thanh toán (như là thẻ tín dụng hay séc ngân hàng) phải được giấu đi đối với những người xem không có thẩm quyền, mã hóa phần tử Payment sẽ làm được điều đó.

Trong trường hợp này, hàm simulateBookSellersEnd trong lớp demoXmlEncApp tạo ra một lệnh gọi tới phương thức công khai encryptElementOfXmlFile của lớp XmlEncryption. Phương thức riêng getElement trả lại nút phần tử mà sau đó được tạo ra và mã hóa để sinh ra thẻ CipherData. Quá trình tạo ra thẻ EncryptedData tương tự như trước, ngoại trừ việc phương thức này thay thế phần tử Payment trong clearDoc bằng phần tử EncryptedData bằng cách gọi phương thức riêng replaceElement. Sau khi việc thay thế được diễn ra, clearDoc được tạo ra và trả về.

3. Mã hóa nội dung một phần tử trong tệp XML bằng Mã hóa XML

Cách mã hóa thứ ba mà nhà bán sách có thể sử dụng đó là chỉ mã hóa số thẻ tín dụng trong Order.xml. Phương thức mã hóa nội dung phần tử được dẫn ra cho phép mã hóa chỉ nội dung văn bản của phần tử CardNo. Việc này sẽ dẫn đến một vấn đề quan trọng đó là: Tại sao bạn cần mã hóa nội dung khi mà vẫn có thể mã hóa toàn bộ phần tử? Việc sử dụng một trong hai phương thức phụ thuộc vào chính sách bảo mật của tài liệu; nếu có nhu cầu khai báo tên của phần tử hay các thuộc tính của nó, trong khi giữ bảo mật nội dung, thì mã hóa nội dung là cần thiết.

Nếu nhà bán sách chỉ muốn giấu số thẻ tín dụng, nội dung văn bản của phần tử CardNo trong Order.xml được mã hóa. Phương thức simulateBookSellersEnd gọi phương thức công khai encryptElementContentOfXmlFile, khác với phương thức encryptElementOfXmlFile chỉ ở chỗ nó hoạt động trên nội dung của phần tử chứ không phải là trên chính phần tử đó.

Sử dụng Mã hóa XML để giải mã một tệp mã hóa XML

Khi bên nhà xuất bản nhận được một tệp mã hóa XML, nó sẽ cần phải được giải mã. Trong cả ba phương thức mã hóa đã miêu tả, phương thức giải mã là getDecryptedData. Phương thức simulateBookSellersEnd trong demoXmlEncApp sắp xếp tệp mã hóa XML vào một chuỗi văn bản và chuyển nó tới phương thức getDecryptedData để giải mã.

Phương thức getDecryptedData xác định các thẻ EncryptedData và trích xuất giá trị mã hóa đã được mã hóa cơ số 64. Tất cả các thông tin cần thiết để giải mã là có trong các thẻ Mã hóa XML: tên của thuật toán mã hóa, loại dữ liệu đã được mã hóa, và tên của chìa khóa mã hóa.

Chú ý: Chi tiết Mã hóa XML không yêu cầu rằng tất cả thông tin này phải có trong các thẻ Mã hóa XML. Các thuộc tính này có hay không cũng tùy. Ứng dụng có thể cung cấp thông tin này thông qua một số phương tiện khác, nhưng ứng dụng dùng thử và thực thi Mã hóa XML mẫu giả thiết rằng tất cả các thông tin có trong các thẻ Mã hóa XML.

Phương thức getDecryptedData bây giờ tạo ra một khóa giải mã từ những tên thuật toán và khóa. Sau đó nó chuyển giá trị mã hóa mã hóa cơ số 64, khóa giải mã, và tên thuật toán tới một phương thức có tên Decrypt (được kiểm tra trong Mã hóa).

Phương thức Decrypt trả lại dữ liệu đã được giải mã như một chuỗi ký tự. Chuỗi ký tự này được điều khiển theo loại thuộc tính của phần tử EncryptionData có thể là một trong các loại sau:

  • Một tệp XML hoàn chỉnh được lưu vào ổ đĩa làm một tệp XML mới
  • Một phần tử thay thế thẻ EncryptedData để tạo ra tệp XML gốc
  • Nội dung của một phần tử, có thể thay thế thẻ EncryptedData để tạo ra tệp XML gốc

Siêu mã hóa

Khi bạn sử dụng siêu mã hóa, bạn có thể mã hóa chỉ thông tin thanh toán với khóa bí mật của phòng kế toán để tạo ra tệp XML mã hóa phần tử. Tệp được tạo ra này sau đó được mã hóa hoàn toàn sử dụng khóa bí mật của phòng bán hàng, vì thế nó tạo ra một tệp XML siêu mã hóa.

Ở đây tôi phải chỉ ra rằng, với chỉ số Mã hóa XML, bạn có thể mã hóa lại một tệp XML được mã hóa tạo ra một tệp XML siêu mã hóa. Nhưng, bạn không thể mã hóa một con đặc biệt của các phần tử EncryptedData hay EncryptedKey sử dụng mã hóa XML. Nói cách khác, một phần tử EncryptedData không thể là bố mẹ hay là con của một phần tử EncryptedData khác.

Theo chỉ số Mã hóa XML, bạn cũng có thể mã hóa dữ liệu bất kỳ (ví dụ, một hình ảnh .jpg hay trên thực tế là bất cứ thứ gì trên Web). Điều này gần như giống với việc mã hóa một tệp XML hoàn chỉnh; điểm khác biệt duy nhất là giá trị của loại thuộc tính cho phần tử EncryptedData (xem Tài nguyên).

Các giá trị IANA

Trong Phần 1 của loạt bài này, tôi sử dụng các định nghĩa loại của Tổ chức cấp phát số hiệu Internet - Internet Assigned Numbers Authority (viết tắt là IANA) làm giá trị của thuộc tính Type trong thẻ EncryptedData. Phần 1 được dựa trên Mã hóa XML W3C Working Draft đề ngày 18 tháng 10 năm 2001. Gần đây, Mã hóa XML đã trở thành một Khuyến nghị Ứng cử W3C (W3C Candidate Recommendation), không còn sử dụng các giá trị IANA (xem Tài nguyên).

Mật mã

Chỉ số Mã hóa XML liệt kê một số các thuật toán mật mã tùy chọn và yêu cầu bao gồm:

  • Mã hóa khối
  • Mã hóa luồng
  • Chuyển khóa
  • Đồng ý khóa
  • Gói khóa đối xứng
  • Liệt kê tin nhắn
  • Xác thực tin nhắn

Thuật toán mã hóa cơ số 64 (xem Tài nguyên) cũng được yêu cầu. Mỗi mã hóa phải được mã hóa cơ số 64 trước khi nó có thể được thêm vào một tài liệu XML. Trong phần giới thiệu này, tôi sử dụng thuật toán mã hóa khối TripleDES của nhà cung cấp mã hóa SunJCE. Chế độ mã hóa là CBC (Móc Nối Khối Mã hóa) với kích thước khối 8-byte.

Lớp XmlEncryption sử dụng mã hóa JCA/JCE, được thực thi bởi các phương thức sau:

  • getEncryptedData: phương thức này chấp nhận môt chuỗi văn bản và mã hóa nó sử dụng thuật toán TripleDES. Đối với mã hóa đối xứng (xem Tài nguyên), bạn cần một khóa mã hóa thêm vào dữ liệu không mã hóa đã được mã hóa. Khóa này có sẵn như một thuộc tính riêng, encKey, của lớp XmlEncryption. Chuỗi văn bản nhập vào được chuyển đổi thành một chuỗi các byte và được thêm vào. Tôi sử dụng một thuật toán mã hóa khối để mã hóa yêu cầu các byte dữ liệu không mã hóa thành các khối 8 byte, vì thế tôi thêm khối chưa hoàn chỉnh cuối cùng với một số ký tự. Thực thi mẫu sử dụng một dấu cách (" ") làm ký tự để thêm.

    Tiếp đến tôi tạo một đối tượng lớp Cipher và triển khai nó trong chế độ mã hóa. Sau đó tôi trích xuất vector khởi động (IV) vào một chuỗi byte, mã hóa khối dữ liệu không mã hóa, và gắn tiền tố các byte IV vào các byte dữ liệu đã mã hóa. Khi tôi sử dụng phương thức getBase64Encoded của lớp XmlEncryption, thì chuỗi byte nhận được sau đó sẽ được chuyển thành một chuỗi mã hóa cơ số 64 và sau đó được trả lại.

  • Decrypt: phương thức này cơ bản đối lập với phương thức getEncryptedData. Nó chấp nhận chuỗi byte mã hóa cơ số 64, và giải mã nó để trả lại chuỗi dữ liệu không mã hóa. IV sau đó được tách ra khỏi chuỗi byte mã hóa thực. Một đối tượng lớp Cipher được tạo ra và triển khai ở trong chế độ giải mã. Chuỗi byte mã hóa sau đó được mã hóa, và chuỗi byte giải mã được trả lại là một chuỗi văn bản.

Tôi đã cung cấp hỗ trợ cho thuật toán khối cypher TripleDES chỉ là để minh họa. Với một vài điều chỉnh, bạn cũng có thể sử dụng các thuật toán khác như là AES.

Thực thi đơn giản này minh họa cho cách Mã hóa XML có thể làm một mô hình bảo mật khả thi cho các ứng dụng doanh nghiệp phức tạp hơn và lớn hơn.


Mã hóa XML và SOAP

Giao thức Truy cập Đối tượng Đơn giản, hay SOAP (xem Tài nguyên), là một giao thức dựa trên XML nhẹ ký dành cho trao đổi dữ liệu. Nó thúc đẩy trao đổi dữ liệu được tạo ra từ các cuộc gọi thủ tục và các hồi đáp từ xa. Nó được thiết kế để sử dụng trong các ứng dụng từ xa và chi phối, và nó là một phần của các dịch vụ Web. SOAP cung cấp một phong bì chứa tin nhắn và các thông tin xử lý của nó. Bởi vì nội dung của phong bì này có thể là riêng tư, bảo mật là một vấn đề mà bạn cần phải giải quyết. Mã hóa XML cung cấp một giải pháp trơn tru cho vấn đề này.

Chính SOAP là XML, nó cho phép bạn tự do giải quyết các vấn đề mã hóa theo bất cứ cách nào hợp lý sử dụng Mã hóa XML. Ví dụ, bạn có thể quyết định mã hóa toàn bộ thân SOAP hay một phần của thân. Tuy nhiên, XML-SEC là một nỗ lực W3C nhằm tiêu chuẩn hóa các cách thức thực thi bảo mật trong các dịch vụ Web dựa trên SOAP. Hiện tại, nó không bao gồm Mã hóa XML; tôi nghĩ là Mã hóa XML hay một phương thức mã hóa tương tự làm một phần của nó trong tương lai.


Kết luận

Trong phần 1, tôi đã giới thiệu Mã hóa XML và bàn về cách sử dụng của nó để có được trao đổi dữ liệu an toàn. Tôi đã nói chi tiết về cách sử dụng của các thẻ Mã hóa XML khác nhau và xử lý một Java API cho Mã hóa XML dựa trên DOM.

Ở phần 2 này, tôi đã kiểm tra một tình huống trao đổi dữ liệu phổ biến mà bạn có thể sử dụng các khái niệm mã hóa XML. Tôi cũng đã minh họa các loại mã hóa XML khác nhau: mã hóa một tệp XML hoàn chỉnh, một phần tử của môt tệp XML, hay những nội dung của một phần tửXML. Tôi cũng bàn về giải mã, siêu mã hóa và ứng dụng của các khái niệm mã hóa XML trong các dịch vụ Web dựa trên SOAP.


Tải về

Mô tảTênKích thước
Mã ví dụx-encrypt2/x-encrypt2_src.zip---

Tài nguyên

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=460428
ArticleTitle=Khám phá XML Encryption (mã hóa XML), Phần 2
publish-date=01082010