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
- SequenceFullException.cs
- LowerCaseStringConverter.cs
- PageWrapper.cs
- EventDriven.cs
- StyleXamlParser.cs
- DataGridViewCheckBoxCell.cs
- regiisutil.cs
- DelegateHelpers.Generated.cs
- FormClosingEvent.cs
- WebConvert.cs
- TextEditorContextMenu.cs
- Triangle.cs
- TextInfo.cs
- SystemInformation.cs
- XmlSchemaObject.cs
- XPathNavigatorException.cs
- XamlSerializationHelper.cs
- PickBranch.cs
- UpdatePanel.cs
- RefType.cs
- SqlDataRecord.cs
- ReadOnlyDataSourceView.cs
- UnsafeNativeMethods.cs
- CacheModeConverter.cs
- CodeMemberEvent.cs
- MonitoringDescriptionAttribute.cs
- ValueTypeFixupInfo.cs
- PathGeometry.cs
- VolatileEnlistmentState.cs
- XpsS0ValidatingLoader.cs
- SafeRegistryHandle.cs
- UriParserTemplates.cs
- TypeDelegator.cs
- FrameworkPropertyMetadata.cs
- ITreeGenerator.cs
- TrackingServices.cs
- CheckBoxList.cs
- VariableAction.cs
- JournalNavigationScope.cs
- BaseProcessor.cs
- AttributeQuery.cs
- BrowserCapabilitiesFactoryBase.cs
- CodeExpressionStatement.cs
- WebPartDeleteVerb.cs
- IconHelper.cs
- CheckoutException.cs
- _NestedSingleAsyncResult.cs
- ChannelCredentials.cs
- SerialPinChanges.cs
- SystemResources.cs
- OdbcConnectionHandle.cs
- SectionInformation.cs
- CodeArrayCreateExpression.cs
- MsmqTransportElement.cs
- SecurityRuntime.cs
- StackSpiller.Bindings.cs
- Int16.cs
- IPGlobalProperties.cs
- PartManifestEntry.cs
- OracleConnectionFactory.cs
- FormatterServicesNoSerializableCheck.cs
- EmissiveMaterial.cs
- OLEDB_Util.cs
- RawKeyboardInputReport.cs
- PropertiesTab.cs
- TdsValueSetter.cs
- SqlFunctionAttribute.cs
- ObjectPersistData.cs
- LexicalChunk.cs
- CoreSwitches.cs
- DynamicContractTypeBuilder.cs
- MembershipSection.cs
- ToolStripProgressBar.cs
- HostedElements.cs
- OleDbRowUpdatedEvent.cs
- BStrWrapper.cs
- XmlRootAttribute.cs
- XsdDataContractImporter.cs
- BufferModeSettings.cs
- IconConverter.cs
- DataGridViewImageCell.cs
- PageContentAsyncResult.cs
- XmlArrayAttribute.cs
- LoginUtil.cs
- TemplateControlCodeDomTreeGenerator.cs
- ToolStripControlHost.cs
- WeakReferenceKey.cs
- CompilerCollection.cs
- SqlCrossApplyToCrossJoin.cs
- FrameworkElement.cs
- BindToObject.cs
- ChangeDirector.cs
- XamlToRtfWriter.cs
- TraceLevelStore.cs
- ReachDocumentSequenceSerializer.cs
- NavigatorInput.cs
- ContextMenuService.cs
- XXXInfos.cs
- TreeNodeStyleCollection.cs
- SettingsBindableAttribute.cs