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
- WebPartConnectVerb.cs
- MimeImporter.cs
- SelfIssuedAuthAsymmetricKey.cs
- Delay.cs
- NetPeerTcpBindingElement.cs
- XmlName.cs
- ProcessRequestAsyncResult.cs
- AddInSegmentDirectoryNotFoundException.cs
- ScriptResourceHandler.cs
- DeflateInput.cs
- PageAsyncTaskManager.cs
- SharedPerformanceCounter.cs
- KeyGestureConverter.cs
- XamlClipboardData.cs
- ProcessModelInfo.cs
- StorageSetMapping.cs
- DodSequenceMerge.cs
- SmtpSection.cs
- TextParaClient.cs
- ValueUtilsSmi.cs
- SetStoryboardSpeedRatio.cs
- DesignerDataConnection.cs
- SchemaTypeEmitter.cs
- TemplateComponentConnector.cs
- XmlCDATASection.cs
- TimeSpanOrInfiniteConverter.cs
- StatusStrip.cs
- HtmlLink.cs
- ClusterUtils.cs
- FrameworkElementFactoryMarkupObject.cs
- CodeAccessPermission.cs
- SqlBulkCopyColumnMapping.cs
- ModelTreeEnumerator.cs
- SafeNativeMethods.cs
- Trustee.cs
- XmlBinaryReaderSession.cs
- StrongName.cs
- LinkedResourceCollection.cs
- ValueTypeFixupInfo.cs
- NavigationPropertyEmitter.cs
- XmlSchemaSubstitutionGroup.cs
- UnionExpr.cs
- BlockCollection.cs
- TemplateNodeContextMenu.cs
- XmlSchemaGroupRef.cs
- URI.cs
- XmlSchemaParticle.cs
- InstanceHandleReference.cs
- TimeSpanConverter.cs
- WebConfigurationFileMap.cs
- PtsPage.cs
- HebrewNumber.cs
- ErrorTableItemStyle.cs
- MachineKeyConverter.cs
- StringCollection.cs
- TypeConverterHelper.cs
- XmlAnyElementAttribute.cs
- RootProfilePropertySettingsCollection.cs
- NativeMethods.cs
- XmlConvert.cs
- FilteredXmlReader.cs
- EUCJPEncoding.cs
- VisualTreeUtils.cs
- KeyValueConfigurationCollection.cs
- HitTestFilterBehavior.cs
- DetailsViewUpdateEventArgs.cs
- XMLUtil.cs
- EmptyStringExpandableObjectConverter.cs
- Encoder.cs
- Int32Converter.cs
- PageTheme.cs
- BufferModesCollection.cs
- ConfigurationException.cs
- NativeMethods.cs
- PixelShader.cs
- DecoderBestFitFallback.cs
- StrongNameUtility.cs
- DataGridViewLinkColumn.cs
- CheckBox.cs
- TypeUtil.cs
- PowerStatus.cs
- ParenExpr.cs
- CommandField.cs
- CursorInteropHelper.cs
- DataMember.cs
- FixedSchema.cs
- DiscriminatorMap.cs
- WebPartDeleteVerb.cs
- WindowsContainer.cs
- ImageAutomationPeer.cs
- XmlAtomicValue.cs
- SessionPageStateSection.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- LongMinMaxAggregationOperator.cs
- filewebrequest.cs
- EventLogEntryCollection.cs
- PageCatalogPart.cs
- CmsInterop.cs
- DrawListViewColumnHeaderEventArgs.cs
- ListViewEditEventArgs.cs