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
- WinEventQueueItem.cs
- ProcessModule.cs
- Camera.cs
- oledbmetadatacollectionnames.cs
- TreeViewItemAutomationPeer.cs
- SiteMapNodeCollection.cs
- ControlAdapter.cs
- SingleStorage.cs
- ExpandCollapsePattern.cs
- TypeSource.cs
- RequestQueue.cs
- ItemsPresenter.cs
- PropertyRecord.cs
- InvalidPropValue.cs
- AsymmetricAlgorithm.cs
- LassoSelectionBehavior.cs
- QilList.cs
- Suspend.cs
- WorkflowMessageEventHandler.cs
- ClientFormsIdentity.cs
- rsa.cs
- EventTrigger.cs
- UICuesEvent.cs
- DbConnectionHelper.cs
- BlurBitmapEffect.cs
- NativeMsmqMessage.cs
- NetPeerTcpBinding.cs
- DiscreteKeyFrames.cs
- TransactionWaitAsyncResult.cs
- CommandTreeTypeHelper.cs
- FontCollection.cs
- NullableConverter.cs
- FontSizeConverter.cs
- PageThemeParser.cs
- HtmlButton.cs
- ConditionBrowserDialog.cs
- Geometry.cs
- TextElementEnumerator.cs
- ListViewHitTestInfo.cs
- BindingGroup.cs
- BaseServiceProvider.cs
- XmlIncludeAttribute.cs
- CaseCqlBlock.cs
- WinFormsComponentEditor.cs
- FunctionParameter.cs
- ViewStateException.cs
- ListDictionaryInternal.cs
- DynamicExpression.cs
- IPPacketInformation.cs
- SQLUtility.cs
- VariableQuery.cs
- SQLMembershipProvider.cs
- DrawingDrawingContext.cs
- CalendarAutoFormatDialog.cs
- RectangleGeometry.cs
- DateTimeValueSerializerContext.cs
- AjaxFrameworkAssemblyAttribute.cs
- PrePrepareMethodAttribute.cs
- Ray3DHitTestResult.cs
- IndependentAnimationStorage.cs
- FontDialog.cs
- StatusBarItemAutomationPeer.cs
- WebPartConnectionsConnectVerb.cs
- ClientSideQueueItem.cs
- PassportAuthenticationModule.cs
- TrackingProfileManager.cs
- OperatingSystem.cs
- Registry.cs
- BitStack.cs
- ValueProviderWrapper.cs
- TabPanel.cs
- QueueProcessor.cs
- WmlPhoneCallAdapter.cs
- Bold.cs
- XpsDocumentEvent.cs
- SqlConnectionString.cs
- BaseProcessProtocolHandler.cs
- HashMembershipCondition.cs
- AspNetSynchronizationContext.cs
- PersonalizationState.cs
- XmlBoundElement.cs
- GPPOINT.cs
- ImageAutomationPeer.cs
- CodeDirectionExpression.cs
- NamespaceInfo.cs
- DetailsViewPageEventArgs.cs
- Substitution.cs
- RelatedEnd.cs
- MenuItemStyleCollection.cs
- HtmlElement.cs
- DrawingCollection.cs
- SkinIDTypeConverter.cs
- ErrorHandlingReceiver.cs
- AxHost.cs
- Figure.cs
- WebPartDisplayMode.cs
- rsa.cs
- XmlHierarchyData.cs
- TextEditorParagraphs.cs
- DecoderFallback.cs