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
- ColorTransform.cs
- filewebrequest.cs
- ModulesEntry.cs
- Environment.cs
- UserControlParser.cs
- HtmlControlPersistable.cs
- SchemeSettingElement.cs
- Debug.cs
- HttpHandlerActionCollection.cs
- PathStreamGeometryContext.cs
- HtmlCalendarAdapter.cs
- DtdParser.cs
- altserialization.cs
- TextTreeInsertUndoUnit.cs
- XmlNamedNodeMap.cs
- SliderAutomationPeer.cs
- _BufferOffsetSize.cs
- SizeFConverter.cs
- ControlParameter.cs
- ListenerElementsCollection.cs
- DBDataPermissionAttribute.cs
- SystemColors.cs
- TraceContextRecord.cs
- ResourceDictionary.cs
- latinshape.cs
- DataObjectAttribute.cs
- Control.cs
- SqlBuilder.cs
- DataGridToolTip.cs
- CachedFontFamily.cs
- MetadataCacheItem.cs
- DataControlImageButton.cs
- DecoderFallbackWithFailureFlag.cs
- IntSecurity.cs
- InvariantComparer.cs
- XAMLParseException.cs
- CompilationUtil.cs
- Image.cs
- PermissionSet.cs
- SignatureHelper.cs
- RSAPKCS1SignatureDeformatter.cs
- QueryStatement.cs
- CommandPlan.cs
- TreePrinter.cs
- Matrix.cs
- DataGridColumnCollectionEditor.cs
- DynamicValueConverter.cs
- SelectionEditingBehavior.cs
- ResXResourceSet.cs
- LogicalMethodInfo.cs
- ComplexType.cs
- BufferedGraphicsContext.cs
- TreePrinter.cs
- MissingSatelliteAssemblyException.cs
- IntellisenseTextBox.cs
- FontStyles.cs
- ToolBarPanel.cs
- XPathArrayIterator.cs
- RowBinding.cs
- SettingsPropertyValue.cs
- XmlWrappingReader.cs
- GridViewItemAutomationPeer.cs
- WebPartCatalogCloseVerb.cs
- SmtpClient.cs
- GenericEnumConverter.cs
- CookieParameter.cs
- XmlAggregates.cs
- BindValidationContext.cs
- RepeatBehavior.cs
- MergePropertyDescriptor.cs
- UnsafeNativeMethodsPenimc.cs
- DataGridViewAutoSizeModeEventArgs.cs
- SchemaType.cs
- ErrorRuntimeConfig.cs
- TypedOperationInfo.cs
- DataControlImageButton.cs
- ExtensibleClassFactory.cs
- _SSPIWrapper.cs
- TraceRecord.cs
- HttpHandlersSection.cs
- EnumValidator.cs
- XmlLoader.cs
- DocComment.cs
- BeginCreateSecurityTokenRequest.cs
- InvalidOperationException.cs
- DoWorkEventArgs.cs
- Point3D.cs
- MetadataCollection.cs
- COM2PropertyDescriptor.cs
- KoreanLunisolarCalendar.cs
- HashCoreRequest.cs
- Properties.cs
- EntityDataSourceWizardForm.cs
- WsdlBuildProvider.cs
- HttpRawResponse.cs
- ClassicBorderDecorator.cs
- DeclarativeCatalogPart.cs
- LineServices.cs
- Variant.cs
- SessionStateSection.cs