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
- TextBoxBase.cs
- Utility.cs
- GridPattern.cs
- Serializer.cs
- FullTextLine.cs
- PaintValueEventArgs.cs
- ColumnBinding.cs
- XmlSchemaGroupRef.cs
- JavaScriptSerializer.cs
- WebPartMenuStyle.cs
- DataBoundControl.cs
- ObjectDataSourceMethodEventArgs.cs
- ReadOnlyDataSourceView.cs
- HScrollProperties.cs
- CultureSpecificStringDictionary.cs
- ExpressionBuilder.cs
- BaseAddressElementCollection.cs
- OrderedDictionary.cs
- SynchronizationFilter.cs
- DbParameterHelper.cs
- NameTable.cs
- ConnectionProviderAttribute.cs
- ImageListStreamer.cs
- CqlBlock.cs
- OracleDataReader.cs
- DbDataSourceEnumerator.cs
- PrimitiveType.cs
- BackStopAuthenticationModule.cs
- IntegerValidatorAttribute.cs
- UriPrefixTable.cs
- PerformanceCounterPermission.cs
- TypeLibConverter.cs
- Scalars.cs
- AutoGeneratedFieldProperties.cs
- ServiceChannelProxy.cs
- CodeArgumentReferenceExpression.cs
- BitmapSource.cs
- ADMembershipUser.cs
- RectIndependentAnimationStorage.cs
- TextBox.cs
- ComAwareEventInfo.cs
- RijndaelManaged.cs
- AbandonedMutexException.cs
- LineGeometry.cs
- Polyline.cs
- AppDomainAttributes.cs
- XamlSerializationHelper.cs
- DataService.cs
- DelegateOutArgument.cs
- ProcessRequestArgs.cs
- LocalValueEnumerator.cs
- ProtocolsSection.cs
- DataKeyArray.cs
- ExpressionEditorSheet.cs
- ActivationWorker.cs
- ExtensionWindowHeader.cs
- TdsParserStaticMethods.cs
- Sentence.cs
- CodeAssignStatement.cs
- CodeExpressionStatement.cs
- ReadOnlyTernaryTree.cs
- SamlAuthorityBinding.cs
- xsdvalidator.cs
- PromptStyle.cs
- RangeContentEnumerator.cs
- TileModeValidation.cs
- SharedPerformanceCounter.cs
- SecurityTokenProvider.cs
- DataColumnChangeEvent.cs
- FixedSOMElement.cs
- QueryHandler.cs
- FixedStringLookup.cs
- RangeBaseAutomationPeer.cs
- ClickablePoint.cs
- NTAccount.cs
- ContainerControl.cs
- TypeGeneratedEventArgs.cs
- SuppressMergeCheckAttribute.cs
- ConfigurationManager.cs
- AccessDataSource.cs
- RegexWriter.cs
- HiddenField.cs
- ColorContext.cs
- ToolBarTray.cs
- OleTxTransaction.cs
- Mappings.cs
- DocumentationServerProtocol.cs
- SourceElementsCollection.cs
- GiveFeedbackEvent.cs
- ButtonBase.cs
- ReadWriteSpinLock.cs
- SqlDataSourceTableQuery.cs
- DispatchWrapper.cs
- SmiEventSink.cs
- CharUnicodeInfo.cs
- CustomErrorsSection.cs
- Tool.cs
- ImageFormatConverter.cs
- SqlCaseSimplifier.cs
- SurrogateEncoder.cs