Code:
/ 4.0 / 4.0 / untmp / 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
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DoubleAnimationUsingPath.cs
- ErrorWebPart.cs
- OleDbPropertySetGuid.cs
- NonSerializedAttribute.cs
- MarkupProperty.cs
- AssemblyFilter.cs
- WebPartEventArgs.cs
- WizardStepBase.cs
- ReadWriteControlDesigner.cs
- XmlDictionaryString.cs
- TypeDescriptionProviderAttribute.cs
- TrustLevelCollection.cs
- SwitchElementsCollection.cs
- ConnectionManagementElementCollection.cs
- SafeViewOfFileHandle.cs
- HTTPNotFoundHandler.cs
- ResXBuildProvider.cs
- Int32RectValueSerializer.cs
- TextEffectResolver.cs
- CompoundFileStorageReference.cs
- TypeDescriptor.cs
- XmlILTrace.cs
- RsaKeyGen.cs
- PrefixQName.cs
- BuildResult.cs
- BindingList.cs
- ScrollChrome.cs
- SoapExtensionImporter.cs
- KnownBoxes.cs
- FontStyles.cs
- ProgressBarRenderer.cs
- StyleSheetDesigner.cs
- XmlCharCheckingWriter.cs
- AdornerPresentationContext.cs
- StatusBar.cs
- StylusPointPropertyInfoDefaults.cs
- Hash.cs
- RangeEnumerable.cs
- PassportPrincipal.cs
- FormsAuthenticationUserCollection.cs
- ParentControlDesigner.cs
- DataListItemCollection.cs
- TextServicesCompartmentContext.cs
- ErrorFormatterPage.cs
- DesignerForm.cs
- ChannelFactory.cs
- HyperLinkField.cs
- ConfigurationFileMap.cs
- ListBase.cs
- DynamicVirtualDiscoSearcher.cs
- UnsafeNativeMethods.cs
- ToolStripItemCollection.cs
- GregorianCalendarHelper.cs
- DesignerActionItemCollection.cs
- ObjectListCommandsPage.cs
- ParameterBuilder.cs
- AttributeCollection.cs
- ScrollEvent.cs
- BamlRecords.cs
- String.cs
- DataBindingList.cs
- CodeEventReferenceExpression.cs
- smtppermission.cs
- XmlSchemaSimpleTypeList.cs
- RedBlackList.cs
- Matrix3DConverter.cs
- XmlnsDefinitionAttribute.cs
- SimpleTypesSurrogate.cs
- HandleRef.cs
- XmlTextReaderImpl.cs
- ValidatorCollection.cs
- ImageMetadata.cs
- ReachNamespaceInfo.cs
- XhtmlBasicLiteralTextAdapter.cs
- TakeQueryOptionExpression.cs
- EntityCollection.cs
- XmlExtensionFunction.cs
- TransportChannelListener.cs
- WindowsIdentity.cs
- DataGridViewRowStateChangedEventArgs.cs
- CapiSafeHandles.cs
- DateTimePicker.cs
- ProfileService.cs
- XmlBinaryWriter.cs
- RegexFCD.cs
- ModifierKeysConverter.cs
- ValidatorCompatibilityHelper.cs
- ListViewContainer.cs
- HScrollBar.cs
- EncryptedPackage.cs
- ScanQueryOperator.cs
- CustomErrorsSectionWrapper.cs
- UserPreferenceChangedEventArgs.cs
- DictationGrammar.cs
- WebPartEditorCancelVerb.cs
- SemaphoreFullException.cs
- loginstatus.cs
- PolygonHotSpot.cs
- LocalizableResourceBuilder.cs
- WebPartConnectVerb.cs