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
- CookielessHelper.cs
- AstTree.cs
- CompiledQuery.cs
- BridgeDataRecord.cs
- IteratorFilter.cs
- DataContractAttribute.cs
- FamilyTypefaceCollection.cs
- DivideByZeroException.cs
- Matrix3D.cs
- WhitespaceReader.cs
- ReadWriteControlDesigner.cs
- TransformPattern.cs
- ToolStripLabel.cs
- ParsedAttributeCollection.cs
- MD5.cs
- XmlChoiceIdentifierAttribute.cs
- HtmlContainerControl.cs
- TrustLevel.cs
- ContextToken.cs
- BaseAddressPrefixFilterElementCollection.cs
- GeneralTransform.cs
- XD.cs
- mediaeventargs.cs
- ipaddressinformationcollection.cs
- FamilyMapCollection.cs
- WarningException.cs
- InputLanguageProfileNotifySink.cs
- Animatable.cs
- RelationshipConverter.cs
- PerformanceCounterNameAttribute.cs
- Calendar.cs
- ProcessHostFactoryHelper.cs
- TreeViewImageIndexConverter.cs
- ICspAsymmetricAlgorithm.cs
- DataGridViewImageColumn.cs
- ListBox.cs
- ResXResourceSet.cs
- XsdValidatingReader.cs
- IgnoreFileBuildProvider.cs
- DataTemplateSelector.cs
- DataSourceNameHandler.cs
- RestHandlerFactory.cs
- hwndwrapper.cs
- AliasedSlot.cs
- HotSpotCollectionEditor.cs
- GridItemCollection.cs
- ConfigurationPropertyAttribute.cs
- SetterBase.cs
- OracleParameterCollection.cs
- CommandField.cs
- PrePrepareMethodAttribute.cs
- RemoveStoryboard.cs
- DataBindingCollection.cs
- UriExt.cs
- HttpDebugHandler.cs
- PrinterResolution.cs
- CoTaskMemHandle.cs
- CultureInfo.cs
- DataTableExtensions.cs
- PathGeometry.cs
- PromptStyle.cs
- Pkcs9Attribute.cs
- FileIOPermission.cs
- RecognizerBase.cs
- ClientSideQueueItem.cs
- FileDialogCustomPlace.cs
- DataSourceNameHandler.cs
- DataObject.cs
- DateTimeParse.cs
- IdentityManager.cs
- FactoryId.cs
- FontDialog.cs
- GZipStream.cs
- ColorTransform.cs
- DivideByZeroException.cs
- RedirectionProxy.cs
- FixedTextSelectionProcessor.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- SoapExtensionStream.cs
- CommandSet.cs
- Interlocked.cs
- InheritedPropertyChangedEventArgs.cs
- Thread.cs
- ExpressionVisitor.cs
- entityreference_tresulttype.cs
- UnknownBitmapEncoder.cs
- TableItemStyle.cs
- XmlSchemaElement.cs
- AnnotationAdorner.cs
- Typeface.cs
- ExpressionHelper.cs
- TemplateControlParser.cs
- SqlDataSourceSelectingEventArgs.cs
- DriveInfo.cs
- MailAddressCollection.cs
- HotSpotCollection.cs
- RangeValidator.cs
- UIElement.cs
- ColorConverter.cs
- PassportAuthenticationEventArgs.cs