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
- TryCatch.cs
- UrlRoutingHandler.cs
- XmlCDATASection.cs
- HttpProfileBase.cs
- TreeViewImageIndexConverter.cs
- SourceSwitch.cs
- Icon.cs
- TypedTableBaseExtensions.cs
- FrameworkElement.cs
- documentsequencetextpointer.cs
- PathFigure.cs
- LineBreak.cs
- References.cs
- RegistryExceptionHelper.cs
- PackageRelationship.cs
- ConfigurationHelpers.cs
- HtmlTableRow.cs
- ActiveXSite.cs
- ReadOnlyHierarchicalDataSourceView.cs
- QuaternionAnimation.cs
- ObjectDataSourceDisposingEventArgs.cs
- CodeActivityContext.cs
- PeerObject.cs
- AccessibleObject.cs
- Font.cs
- ScrollChrome.cs
- ObjectQueryExecutionPlan.cs
- Catch.cs
- FrameDimension.cs
- Helper.cs
- QilUnary.cs
- AdRotator.cs
- BindableTemplateBuilder.cs
- DataServiceClientException.cs
- XmlDataProvider.cs
- ExpandSegment.cs
- Geometry.cs
- NodeFunctions.cs
- TypefaceCollection.cs
- ButtonChrome.cs
- Expression.cs
- NavigationProperty.cs
- odbcmetadatacollectionnames.cs
- GacUtil.cs
- SynchronizingStream.cs
- Encoder.cs
- HtmlLabelAdapter.cs
- RijndaelManagedTransform.cs
- QueryGenerator.cs
- Single.cs
- ExpressionBuilderContext.cs
- DataContext.cs
- DataRecordInternal.cs
- TextHidden.cs
- ButtonFieldBase.cs
- DEREncoding.cs
- ServerTooBusyException.cs
- CryptoApi.cs
- UInt64Converter.cs
- DeferredSelectedIndexReference.cs
- MessageBox.cs
- WindowsScrollBarBits.cs
- FileBasedResourceGroveler.cs
- OrderedEnumerableRowCollection.cs
- NamespaceEmitter.cs
- BulletChrome.cs
- SpeechAudioFormatInfo.cs
- CodeRegionDirective.cs
- SmtpNetworkElement.cs
- CustomAttributeBuilder.cs
- ColorConvertedBitmap.cs
- AppDomainInstanceProvider.cs
- DocumentOrderQuery.cs
- Substitution.cs
- GlyphElement.cs
- Rect.cs
- DataFormats.cs
- XmlIgnoreAttribute.cs
- WeakReferenceKey.cs
- XmlEventCache.cs
- HelpKeywordAttribute.cs
- TypeSystem.cs
- StringDictionaryEditor.cs
- SimplePropertyEntry.cs
- FileDialog.cs
- Mapping.cs
- OrthographicCamera.cs
- IdentitySection.cs
- EventWaitHandle.cs
- SeparatorAutomationPeer.cs
- CategoryAttribute.cs
- AddInBase.cs
- ResolveNameEventArgs.cs
- TPLETWProvider.cs
- DesignTimeVisibleAttribute.cs
- DataRecord.cs
- HandleValueEditor.cs
- TextEditor.cs
- PseudoWebRequest.cs
- RoleService.cs