Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Security / MachineKey.cs / 1305376 / MachineKey.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* MachineKey
*
* Copyright (c) 2009 Microsoft Corporation
*/
namespace System.Web.Security {
using System.Web.Configuration;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public enum MachineKeyProtection {
All,
Encryption,
Validation
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static class MachineKey {
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static string Encode(byte[] data, MachineKeyProtection protectionOption) {
if (data == null)
throw new ArgumentNullException("data");
//////////////////////////////////////////////////////////////////////
// Step 1: Get the MAC and add to the blob
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Validation) {
byte [] bHash = MachineKeySection.HashData(data, null, 0, data.Length);
byte [] bAll = new byte[bHash.Length + data.Length];
Buffer.BlockCopy(data, 0, bAll, 0, data.Length);
Buffer.BlockCopy(bHash, 0, bAll, data.Length, bHash.Length);
data = bAll;
}
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Encryption) {
//////////////////////////////////////////////////////////////////////
// Step 2: Encryption
data = MachineKeySection.EncryptOrDecryptData(true, data, null, 0, data.Length, false, false, IVType.Random);
}
//////////////////////////////////////////////////////////////////////
// Step 3: Covert the buffer to HEX string and return it
return MachineKeySection.ByteArrayToHexString(data, 0);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static byte [] Decode(string encodedData, MachineKeyProtection protectionOption) {
if (encodedData == null)
throw new ArgumentNullException("encodedData");
if ((encodedData.Length % 2) != 0)
throw new ArgumentException(null, "encodedData");
byte [] data = null;
try {
//////////////////////////////////////////////////////////////////////
// Step 1: Covert the HEX string to byte array
data = MachineKeySection.HexStringToByteArray(encodedData);
} catch {
throw new ArgumentException(null, "encodedData");
}
if (data == null || data.Length < 1)
throw new ArgumentException(null, "encodedData");
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Encryption) {
//////////////////////////////////////////////////////////////////
// Step 2: Decrypt the data
data = MachineKeySection.EncryptOrDecryptData(false, data, null, 0, data.Length, false, false, IVType.Random);
if (data == null)
return null;
}
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Validation) {
//////////////////////////////////////////////////////////////////
// Step 3a: Remove the hash from the end of the data
if (data.Length < MachineKeySection.HashSize)
return null;
byte [] originalData = data;
data = new byte[originalData.Length - MachineKeySection.HashSize];
Buffer.BlockCopy(originalData, 0, data, 0, data.Length);
//////////////////////////////////////////////////////////////////
// Step 3b: Calculate the hash and make sure it matches
byte [] bHash = MachineKeySection.HashData(data, null, 0, data.Length);
if (bHash == null || bHash.Length != MachineKeySection.HashSize)
return null; // Sizes don't match
for(int iter=0; iter
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* MachineKey
*
* Copyright (c) 2009 Microsoft Corporation
*/
namespace System.Web.Security {
using System.Web.Configuration;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public enum MachineKeyProtection {
All,
Encryption,
Validation
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static class MachineKey {
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static string Encode(byte[] data, MachineKeyProtection protectionOption) {
if (data == null)
throw new ArgumentNullException("data");
//////////////////////////////////////////////////////////////////////
// Step 1: Get the MAC and add to the blob
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Validation) {
byte [] bHash = MachineKeySection.HashData(data, null, 0, data.Length);
byte [] bAll = new byte[bHash.Length + data.Length];
Buffer.BlockCopy(data, 0, bAll, 0, data.Length);
Buffer.BlockCopy(bHash, 0, bAll, data.Length, bHash.Length);
data = bAll;
}
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Encryption) {
//////////////////////////////////////////////////////////////////////
// Step 2: Encryption
data = MachineKeySection.EncryptOrDecryptData(true, data, null, 0, data.Length, false, false, IVType.Random);
}
//////////////////////////////////////////////////////////////////////
// Step 3: Covert the buffer to HEX string and return it
return MachineKeySection.ByteArrayToHexString(data, 0);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public static byte [] Decode(string encodedData, MachineKeyProtection protectionOption) {
if (encodedData == null)
throw new ArgumentNullException("encodedData");
if ((encodedData.Length % 2) != 0)
throw new ArgumentException(null, "encodedData");
byte [] data = null;
try {
//////////////////////////////////////////////////////////////////////
// Step 1: Covert the HEX string to byte array
data = MachineKeySection.HexStringToByteArray(encodedData);
} catch {
throw new ArgumentException(null, "encodedData");
}
if (data == null || data.Length < 1)
throw new ArgumentException(null, "encodedData");
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Encryption) {
//////////////////////////////////////////////////////////////////
// Step 2: Decrypt the data
data = MachineKeySection.EncryptOrDecryptData(false, data, null, 0, data.Length, false, false, IVType.Random);
if (data == null)
return null;
}
if (protectionOption == MachineKeyProtection.All || protectionOption == MachineKeyProtection.Validation) {
//////////////////////////////////////////////////////////////////
// Step 3a: Remove the hash from the end of the data
if (data.Length < MachineKeySection.HashSize)
return null;
byte [] originalData = data;
data = new byte[originalData.Length - MachineKeySection.HashSize];
Buffer.BlockCopy(originalData, 0, data, 0, data.Length);
//////////////////////////////////////////////////////////////////
// Step 3b: Calculate the hash and make sure it matches
byte [] bHash = MachineKeySection.HashData(data, null, 0, data.Length);
if (bHash == null || bHash.Length != MachineKeySection.HashSize)
return null; // Sizes don't match
for(int iter=0; iter
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SearchExpression.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ServiceModelSecurityTokenRequirement.cs
- IISMapPath.cs
- TextureBrush.cs
- CodeGotoStatement.cs
- XmlEntityReference.cs
- FixedTextView.cs
- AttachInfo.cs
- NodeLabelEditEvent.cs
- HtmlTableRowCollection.cs
- SecUtil.cs
- XamlPoint3DCollectionSerializer.cs
- ProfilePropertySettings.cs
- PackagePart.cs
- Validator.cs
- JournalEntry.cs
- AttributeXamlType.cs
- BitmapEffectCollection.cs
- WebPartConnection.cs
- Substitution.cs
- UniqueIdentifierService.cs
- DoubleCollectionConverter.cs
- CommandDevice.cs
- MobileControl.cs
- TextOutput.cs
- PageFunction.cs
- SqlCacheDependencyDatabase.cs
- HttpProfileGroupBase.cs
- RequestBringIntoViewEventArgs.cs
- SortKey.cs
- DataControlPagerLinkButton.cs
- StrongNameUtility.cs
- xsdvalidator.cs
- DataGrid.cs
- DashStyle.cs
- ArrayTypeMismatchException.cs
- CodeGroup.cs
- InlineUIContainer.cs
- BidPrivateBase.cs
- TdsValueSetter.cs
- ApplicationId.cs
- WebConfigurationFileMap.cs
- PackageFilter.cs
- ISO2022Encoding.cs
- XmlText.cs
- LocalFileSettingsProvider.cs
- LoginUtil.cs
- HtmlTextArea.cs
- XamlGridLengthSerializer.cs
- EdmTypeAttribute.cs
- SynchronizedPool.cs
- DataExpression.cs
- WebBrowserEvent.cs
- RelatedCurrencyManager.cs
- Propagator.cs
- TaiwanLunisolarCalendar.cs
- ConvertTextFrag.cs
- Helpers.cs
- SiteMapNodeItemEventArgs.cs
- WSDualHttpBindingElement.cs
- AssociatedControlConverter.cs
- ConditionalWeakTable.cs
- ErrorEventArgs.cs
- ListParagraph.cs
- OptimalBreakSession.cs
- ProjectionCamera.cs
- _SSPIWrapper.cs
- TextTreeTextNode.cs
- DrawingVisual.cs
- ResourceDescriptionAttribute.cs
- ThemeDirectoryCompiler.cs
- ExceptionValidationRule.cs
- Monitor.cs
- PrivilegedConfigurationManager.cs
- OutputScope.cs
- Point.cs
- VariantWrapper.cs
- SqlBulkCopyColumnMappingCollection.cs
- IxmlLineInfo.cs
- InlineUIContainer.cs
- CustomCredentialPolicy.cs
- InputDevice.cs
- ExtensibleClassFactory.cs
- HttpListenerException.cs
- DataBoundControlHelper.cs
- HostedAspNetEnvironment.cs
- PenLineCapValidation.cs
- ProfessionalColors.cs
- OperationPickerDialog.designer.cs
- HitTestParameters3D.cs
- QilParameter.cs
- PropertySet.cs
- BinaryParser.cs
- MetafileHeaderEmf.cs
- Oid.cs
- ProfilePropertySettingsCollection.cs
- TdsParserHelperClasses.cs
- ApplicationHost.cs
- UnknownExceptionActionHelper.cs