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
- MailHeaderInfo.cs
- HtmlInputButton.cs
- PropertyEmitterBase.cs
- RadioButton.cs
- DictionaryGlobals.cs
- Style.cs
- XmlUtil.cs
- SelectionWordBreaker.cs
- ContainerUtilities.cs
- CheckoutException.cs
- DataSourceControlBuilder.cs
- mediaclock.cs
- ToolStripDropDownButton.cs
- PermissionSetTriple.cs
- LogLogRecordEnumerator.cs
- ThicknessAnimationUsingKeyFrames.cs
- RefreshEventArgs.cs
- TypeConstant.cs
- DLinqAssociationProvider.cs
- AsyncCompletedEventArgs.cs
- propertytag.cs
- EventSetter.cs
- Internal.cs
- SeekStoryboard.cs
- FixedSOMImage.cs
- QueueProcessor.cs
- Bind.cs
- CustomGrammar.cs
- ServerValidateEventArgs.cs
- SchemaElementLookUpTable.cs
- GridViewCancelEditEventArgs.cs
- XmlWriter.cs
- ScriptReference.cs
- KeyPullup.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- OverrideMode.cs
- EventsTab.cs
- FormatConvertedBitmap.cs
- NetworkInformationPermission.cs
- PointCollection.cs
- TransactionScope.cs
- ToolStripDropDown.cs
- InstalledFontCollection.cs
- COM2IProvidePropertyBuilderHandler.cs
- ReadOnlyHierarchicalDataSource.cs
- RuleSet.cs
- PathNode.cs
- QuaternionIndependentAnimationStorage.cs
- InternalPermissions.cs
- ToolStrip.cs
- SqlParameterizer.cs
- WebPartConnectionsConnectVerb.cs
- TriState.cs
- StrokeFIndices.cs
- BitmapPalette.cs
- _SSPISessionCache.cs
- COM2ComponentEditor.cs
- DesignerCatalogPartChrome.cs
- GenericEnumerator.cs
- PathFigureCollectionConverter.cs
- httpstaticobjectscollection.cs
- SmiEventStream.cs
- TableSectionStyle.cs
- DialogResultConverter.cs
- WindowsSysHeader.cs
- QilTernary.cs
- Brush.cs
- RoutedEventValueSerializer.cs
- ExitEventArgs.cs
- DataListComponentEditor.cs
- PictureBox.cs
- MetricEntry.cs
- PtsCache.cs
- PDBReader.cs
- DataTableExtensions.cs
- unitconverter.cs
- PropertyPushdownHelper.cs
- SettingsAttributes.cs
- WebPartCatalogAddVerb.cs
- SpeechSynthesizer.cs
- Char.cs
- ThemeDirectoryCompiler.cs
- MetafileHeaderWmf.cs
- Pen.cs
- ProcessModelSection.cs
- FlowNode.cs
- PassportAuthentication.cs
- ZoneIdentityPermission.cs
- ToolBarButtonClickEvent.cs
- BevelBitmapEffect.cs
- IdentitySection.cs
- VerticalAlignConverter.cs
- OdbcInfoMessageEvent.cs
- ButtonBaseAdapter.cs
- ConfigurationValue.cs
- PackageStore.cs
- ValueProviderWrapper.cs
- NetPeerTcpBinding.cs
- InstalledFontCollection.cs
- AnnotationStore.cs