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
- StorageInfo.cs
- Range.cs
- ObjectViewListener.cs
- CheckBoxBaseAdapter.cs
- XmlSerializerImportOptions.cs
- LinearGradientBrush.cs
- updateconfighost.cs
- TreeViewCancelEvent.cs
- SettingsPropertyWrongTypeException.cs
- ConnectivityStatus.cs
- InkCanvasSelectionAdorner.cs
- LinqExpressionNormalizer.cs
- JpegBitmapDecoder.cs
- CellQuery.cs
- SizeAnimation.cs
- ModifierKeysValueSerializer.cs
- DetailsViewCommandEventArgs.cs
- ControlPaint.cs
- ConnectionConsumerAttribute.cs
- OperationValidationEventArgs.cs
- ConnectorSelectionGlyph.cs
- DiffuseMaterial.cs
- BamlResourceDeserializer.cs
- GlobalAclOperationRequirement.cs
- HttpModule.cs
- DockProviderWrapper.cs
- ImageConverter.cs
- RoutedEventArgs.cs
- XmlReflectionMember.cs
- ListViewItemSelectionChangedEvent.cs
- WindowsTreeView.cs
- SpellerStatusTable.cs
- SqlBuffer.cs
- ChtmlTextWriter.cs
- TableCellCollection.cs
- LineProperties.cs
- BamlResourceDeserializer.cs
- DrawingBrush.cs
- Decorator.cs
- OracleInternalConnection.cs
- SqlServer2KCompatibilityAnnotation.cs
- ImageCodecInfoPrivate.cs
- WindowsEditBox.cs
- HttpCookieCollection.cs
- EditorZone.cs
- SoapFormatter.cs
- BeginStoryboard.cs
- formatter.cs
- FontSource.cs
- ISAPIRuntime.cs
- PageAsyncTask.cs
- StreamWithDictionary.cs
- WsiProfilesElementCollection.cs
- HtmlWindow.cs
- HyperlinkAutomationPeer.cs
- DataServicePagingProviderWrapper.cs
- CodeTypeReference.cs
- RenderTargetBitmap.cs
- RSAProtectedConfigurationProvider.cs
- FastEncoderWindow.cs
- AsmxEndpointPickerExtension.cs
- DataGridViewTopLeftHeaderCell.cs
- IndexedEnumerable.cs
- SqlRewriteScalarSubqueries.cs
- ProjectionPruner.cs
- CqlBlock.cs
- EventSetter.cs
- DependencyProperty.cs
- UnsafeNativeMethods.cs
- ProfilePropertySettings.cs
- AbsoluteQuery.cs
- AssemblyBuilder.cs
- RewritingSimplifier.cs
- PropertyPathConverter.cs
- Opcode.cs
- DataSourceControlBuilder.cs
- KeyGestureConverter.cs
- ModelFactory.cs
- Constraint.cs
- DataServiceRequestException.cs
- ScriptRegistrationManager.cs
- PostBackOptions.cs
- DataSet.cs
- CodeAttributeArgument.cs
- XmlMapping.cs
- SystemIcmpV4Statistics.cs
- CodeTryCatchFinallyStatement.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- HtmlObjectListAdapter.cs
- PriorityItem.cs
- X509ChainElement.cs
- SqlIdentifier.cs
- StructuredTypeInfo.cs
- BamlBinaryWriter.cs
- FixUpCollection.cs
- ComponentResourceKeyConverter.cs
- MsmqIntegrationProcessProtocolHandler.cs
- ColorContext.cs
- TakeQueryOptionExpression.cs
- FixedLineResult.cs