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
- ColumnClickEvent.cs
- AsyncCallback.cs
- SerializationEventsCache.cs
- SignerInfo.cs
- XmlCustomFormatter.cs
- CmsInterop.cs
- DbMetaDataFactory.cs
- TableLayoutStyleCollection.cs
- LoadedOrUnloadedOperation.cs
- SubstitutionList.cs
- PersianCalendar.cs
- TimersDescriptionAttribute.cs
- MetafileEditor.cs
- ReferenceSchema.cs
- WebControl.cs
- ObfuscationAttribute.cs
- HtmlEmptyTagControlBuilder.cs
- NotCondition.cs
- InternalDispatchObject.cs
- TreeViewHitTestInfo.cs
- NavigatorInvalidBodyAccessException.cs
- codemethodreferenceexpression.cs
- HttpStaticObjectsCollectionWrapper.cs
- HtmlObjectListAdapter.cs
- FilteredDataSetHelper.cs
- BitmapFrameEncode.cs
- PeerNearMe.cs
- Action.cs
- Parsers.cs
- SemanticResolver.cs
- ComplexType.cs
- InvalidComObjectException.cs
- StringWriter.cs
- ImageListImage.cs
- DebugController.cs
- DataSourceHelper.cs
- DNS.cs
- FigureParaClient.cs
- TransformPatternIdentifiers.cs
- IntegerValidator.cs
- ColorDialog.cs
- DateTime.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- RangeValuePatternIdentifiers.cs
- SchemaSetCompiler.cs
- ReflectionPermission.cs
- DataPagerField.cs
- ScrollEvent.cs
- NativeRecognizer.cs
- DirectionalLight.cs
- BamlResourceSerializer.cs
- dataprotectionpermission.cs
- Interlocked.cs
- querybuilder.cs
- HitTestDrawingContextWalker.cs
- WindowsGraphics2.cs
- SQLInt32Storage.cs
- SQLMoney.cs
- RayHitTestParameters.cs
- CheckableControlBaseAdapter.cs
- ClrPerspective.cs
- RenderData.cs
- ResXDataNode.cs
- DateTimeFormat.cs
- Base64Decoder.cs
- AuthenticatingEventArgs.cs
- TraceRecord.cs
- MasterPage.cs
- ConfigurationValidatorBase.cs
- ImageListUtils.cs
- ToolStripSplitStackLayout.cs
- ThicknessAnimationBase.cs
- WebSysDefaultValueAttribute.cs
- ipaddressinformationcollection.cs
- oledbmetadatacolumnnames.cs
- control.ime.cs
- DbgCompiler.cs
- DSASignatureFormatter.cs
- figurelengthconverter.cs
- AssemblyAttributesGoHere.cs
- IndependentAnimationStorage.cs
- MULTI_QI.cs
- IntMinMaxAggregationOperator.cs
- RequestUriProcessor.cs
- Drawing.cs
- IsolatedStorageFile.cs
- InstanceDataCollectionCollection.cs
- SQLGuidStorage.cs
- X509Certificate.cs
- ModifiableIteratorCollection.cs
- FeatureSupport.cs
- XamlToRtfParser.cs
- SortKey.cs
- RestrictedTransactionalPackage.cs
- versioninfo.cs
- RSAPKCS1SignatureFormatter.cs
- KeyValueInternalCollection.cs
- GridViewPageEventArgs.cs
- WebHttpElement.cs
- SqlGenericUtil.cs