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
- AutomationProperties.cs
- ValidationErrorCollection.cs
- XsdDataContractExporter.cs
- Graph.cs
- ObjectParameterCollection.cs
- ListDesigner.cs
- CompositeDataBoundControl.cs
- TakeOrSkipQueryOperator.cs
- UnionCodeGroup.cs
- ApplicationBuildProvider.cs
- UnknownBitmapDecoder.cs
- xdrvalidator.cs
- XmlProcessingInstruction.cs
- DataTable.cs
- Component.cs
- WebContext.cs
- LiteralDesigner.cs
- ObjectComplexPropertyMapping.cs
- RawUIStateInputReport.cs
- CustomError.cs
- CngAlgorithmGroup.cs
- TreeNodeMouseHoverEvent.cs
- ImageListStreamer.cs
- ExpandButtonVisibilityConverter.cs
- RulePatternOps.cs
- KeyedHashAlgorithm.cs
- DecoderExceptionFallback.cs
- CharStorage.cs
- HandlerBase.cs
- FullTextBreakpoint.cs
- RuntimeConfig.cs
- SiteMapDataSourceView.cs
- ProfileProvider.cs
- MethodBody.cs
- PolyBezierSegmentFigureLogic.cs
- Padding.cs
- AttributeCollection.cs
- PrimitiveXmlSerializers.cs
- SmtpDigestAuthenticationModule.cs
- ExecutedRoutedEventArgs.cs
- UiaCoreApi.cs
- DataGridBeginningEditEventArgs.cs
- MDIWindowDialog.cs
- CoordinationService.cs
- FontConverter.cs
- DocumentViewerBase.cs
- TableCellCollection.cs
- SwitchElementsCollection.cs
- StylusPointPropertyUnit.cs
- PrimitiveType.cs
- DateTimeUtil.cs
- IPPacketInformation.cs
- UpdatePanelControlTrigger.cs
- ShaderEffect.cs
- ConstructorBuilder.cs
- Size.cs
- DbParameterCollectionHelper.cs
- RepeatButton.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- ConfigXmlElement.cs
- IgnoreSectionHandler.cs
- ProfileParameter.cs
- ContentType.cs
- GiveFeedbackEventArgs.cs
- GenerateHelper.cs
- X509DefaultServiceCertificateElement.cs
- FontFamily.cs
- PartialArray.cs
- StateMachineWorkflow.cs
- XmlSubtreeReader.cs
- SQLGuid.cs
- XmlAutoDetectWriter.cs
- Simplifier.cs
- HttpUnhandledOperationInvoker.cs
- GlobalizationAssembly.cs
- ConfigurationValidatorBase.cs
- assertwrapper.cs
- IUnknownConstantAttribute.cs
- PackageRelationshipCollection.cs
- IfAction.cs
- SuppressMessageAttribute.cs
- HtmlInputCheckBox.cs
- TerminateDesigner.cs
- Console.cs
- DynamicDocumentPaginator.cs
- BreadCrumbTextConverter.cs
- rsa.cs
- DataGridPageChangedEventArgs.cs
- SplitterPanelDesigner.cs
- AddressAccessDeniedException.cs
- FieldAccessException.cs
- CorrelationQuery.cs
- X509UI.cs
- StylusPointPropertyId.cs
- Exception.cs
- GlobalizationSection.cs
- XmlUTF8TextWriter.cs
- ClientEventManager.cs
- DebugControllerThread.cs
- CommandValueSerializer.cs