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
- NotImplementedException.cs
- MetadataArtifactLoaderComposite.cs
- SqlFacetAttribute.cs
- BaseDataBoundControl.cs
- ContentPresenter.cs
- XmlElementAttributes.cs
- Html32TextWriter.cs
- CannotUnloadAppDomainException.cs
- Part.cs
- DefaultSettingsSection.cs
- DetailsViewUpdateEventArgs.cs
- DataViewSettingCollection.cs
- EmptyEnumerator.cs
- GZipUtils.cs
- DataBindingList.cs
- elementinformation.cs
- BreadCrumbTextConverter.cs
- BaseCodePageEncoding.cs
- DataGridViewHeaderCell.cs
- EncoderExceptionFallback.cs
- DynamicMetaObject.cs
- AssemblyResourceLoader.cs
- KoreanLunisolarCalendar.cs
- WrapPanel.cs
- StandardCommands.cs
- WebPartVerbsEventArgs.cs
- XamlTypeMapperSchemaContext.cs
- PackageRelationshipSelector.cs
- DesignerHierarchicalDataSourceView.cs
- HttpProcessUtility.cs
- MailAddressCollection.cs
- DataKeyCollection.cs
- shaperfactory.cs
- ScriptingAuthenticationServiceSection.cs
- RelationshipDetailsCollection.cs
- AtomEntry.cs
- EventMappingSettingsCollection.cs
- StateRuntime.cs
- WebServiceFault.cs
- UriParserTemplates.cs
- StrongNameUtility.cs
- PtsHelper.cs
- FreezableDefaultValueFactory.cs
- HitTestWithGeometryDrawingContextWalker.cs
- ReaderOutput.cs
- contentDescriptor.cs
- WebPart.cs
- AspNetHostingPermission.cs
- ReferenceSchema.cs
- NumericUpDownAcceleration.cs
- ListBox.cs
- ApplicationContext.cs
- StylusButtonCollection.cs
- ProcessThread.cs
- OpCopier.cs
- XmlCharCheckingWriter.cs
- DataGridViewColumnCollection.cs
- StrokeDescriptor.cs
- MarkupCompiler.cs
- MessageQueueKey.cs
- URLEditor.cs
- CollectionChangedEventManager.cs
- SqlClientPermission.cs
- RectAnimationClockResource.cs
- DBSqlParserColumn.cs
- MgmtConfigurationRecord.cs
- PartitionedStream.cs
- _IPv4Address.cs
- ContractDescription.cs
- UIServiceHelper.cs
- ProfileSettingsCollection.cs
- QueryInterceptorAttribute.cs
- ExtendedPropertyCollection.cs
- CodeNamespaceImport.cs
- CornerRadius.cs
- BufferedReadStream.cs
- XamlBrushSerializer.cs
- SmiMetaData.cs
- SchemaRegistration.cs
- GridViewRowPresenter.cs
- PanelContainerDesigner.cs
- PageAdapter.cs
- Wizard.cs
- Random.cs
- PerformanceCounterManager.cs
- SystemIPAddressInformation.cs
- ContextStack.cs
- EntityClassGenerator.cs
- AnonymousIdentificationSection.cs
- CheckBox.cs
- XmlCharCheckingReader.cs
- ObjectQueryExecutionPlan.cs
- UserControlParser.cs
- CollectionViewGroupRoot.cs
- IdnMapping.cs
- grammarelement.cs
- ColorMap.cs
- M3DUtil.cs
- LocalValueEnumerator.cs
- SizeAnimationUsingKeyFrames.cs