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
- TransactionChannelFaultConverter.cs
- mda.cs
- HierarchicalDataSourceControl.cs
- ActiveXContainer.cs
- XmlSchemaSimpleContentExtension.cs
- PersonalizationAdministration.cs
- Track.cs
- DragEvent.cs
- GB18030Encoding.cs
- GetCertificateRequest.cs
- WebUtil.cs
- login.cs
- SettingsPropertyValue.cs
- StrokeCollection2.cs
- Int64KeyFrameCollection.cs
- LinqDataSourceValidationException.cs
- ColorContextHelper.cs
- WindowsListViewGroup.cs
- DataRelationPropertyDescriptor.cs
- ToolboxService.cs
- AsymmetricKeyExchangeDeformatter.cs
- XmlCollation.cs
- ObjectMemberMapping.cs
- EventsTab.cs
- SvcMapFile.cs
- DataGridState.cs
- DesignerActionPanel.cs
- xsdvalidator.cs
- ContentValidator.cs
- BrushMappingModeValidation.cs
- EnumMember.cs
- SqlClientWrapperSmiStreamChars.cs
- WriterOutput.cs
- SimpleHandlerFactory.cs
- QuadraticBezierSegment.cs
- ThrowHelper.cs
- DataGridViewTopRowAccessibleObject.cs
- PolyLineSegmentFigureLogic.cs
- MsmqHostedTransportConfiguration.cs
- MetafileHeaderEmf.cs
- GregorianCalendarHelper.cs
- PersonalizableTypeEntry.cs
- CodeRegionDirective.cs
- WriterOutput.cs
- AsymmetricAlgorithm.cs
- MD5CryptoServiceProvider.cs
- PieceNameHelper.cs
- ObjectSet.cs
- PageThemeBuildProvider.cs
- ReadWriteObjectLock.cs
- DataGridViewCellCollection.cs
- autovalidator.cs
- DeflateStream.cs
- RepeatBehaviorConverter.cs
- ItemCollection.cs
- SchemaConstraints.cs
- IPAddressCollection.cs
- ArrayTypeMismatchException.cs
- TreeNodeBindingCollection.cs
- _SecureChannel.cs
- DbSourceCommand.cs
- SiteMap.cs
- ChangePassword.cs
- CharacterBuffer.cs
- ReachDocumentPageSerializer.cs
- DataGridViewColumnHeaderCell.cs
- XmlSchemaValidator.cs
- TaskHelper.cs
- ProfileBuildProvider.cs
- TextSerializer.cs
- QuaternionAnimationUsingKeyFrames.cs
- XmlDeclaration.cs
- ValidationErrorEventArgs.cs
- DataContext.cs
- DrawingCollection.cs
- FilteredDataSetHelper.cs
- FileNotFoundException.cs
- VisualBrush.cs
- Point3D.cs
- ConfigurationSectionGroup.cs
- ReadOnlyCollection.cs
- XmlSchemaImport.cs
- SqlDataRecord.cs
- XmlNodeReader.cs
- SafeUserTokenHandle.cs
- VBCodeProvider.cs
- EllipseGeometry.cs
- ErrorEventArgs.cs
- SessionStateContainer.cs
- TextEndOfParagraph.cs
- ServiceOperationWrapper.cs
- DataDocumentXPathNavigator.cs
- ListControl.cs
- SmtpTransport.cs
- LayoutManager.cs
- SelectionUIHandler.cs
- QualifiedCellIdBoolean.cs
- KeyboardNavigation.cs
- StringToken.cs
- ComboBoxRenderer.cs