Decrypting Profile Data

Commerce Server 2007
For the latest version of Commerce Server 2007 Help, see the Microsoft Web site.

After encrypting your profile data, you need to verify encryption and retrieve the decrypted property values.

To verify encryption and retrieve decrypted property values

  1. Use the Profile Key Manager utility to generate a private key and a public key.

  2. Create a ProfileContext object by passing it a connection string.

  3. Get the user's profile by calling the GetProfile method of the ProfileContext object.

  4. Iterate through all the ProfilePropertyGroup objects in the ProfilePropertyGroupCollection collection.

The following code example shows how to decrypt profile data.

using Microsoft.CommerceServer;
using Microsoft.CommerceServer.Runtime;
using Runtime = Microsoft.CommerceServer.Runtime.Profiles;
using RTDbg = Microsoft.CommerceServer.Runtime.Diagnostics;

// tbLogin - TextBox with profile's logon name, for example, "JoeUser"
// tbPropGroup - TextBox with property group name, for example, "AccountInfo"
// tbPropName - TextBox with property name, for example, "SSN"

    // publicKey and privateKey values generated by ProfileKeyManager.exe.
    string publicKey = "<publicKey>";
    string privateKey = "<privateKey>";

    // Profile Connection String - value can be retrieved from Commerce Server.
    // Manager, Console Root -> Commerce Server Manager -> Global Resources -> 
    // Profiles, right-click and select Properties, highlight 
    // s_ProfileServiceConnectionString.
    string connString = "Provider=CSOLEDB;Data Source=<computername>;Initial Catalog=<CS Site>_commerce;Integrated Security=SSPI;";

    // To decrypt, specify PrivateKey1= and KeyIndex1= if you encrypted 
    // using /i 1 with ProfileKeyManager, or PrivateKey2= and KeyIndex2= if you specified 
    // /i 2 with ProfileKeyManager. 
    if (cbDecrypt.Checked)
    connString += "PublicKey=" + publicKey + ";PrivateKey2=" + privateKey + ";" + "KeyIndex=2";

    RTDbg.ConsoleDebugContext debugContext = new 
    Runtime.ProfileContext rtCtxt = new Runtime.ProfileContext(connString, debugContext);

    Runtime.Profile p = rtCtxt.GetProfile(tbLogin.Text.Trim(), "UserObject");
    foreach (Runtime.ProfilePropertyGroup ppg in p.PropertyGroups)
        if (ppg.Name == tbPropGroup.Text.Trim())
            foreach (Runtime.ProfileProperty pp in ppg.Properties)
                if (pp.Name == tbPropName.Text.Trim())
                    Console.WriteLine(pp.Name + " = \"" + pp.Value.ToString() + "\"", " Property Value");
catch (Exception ex)