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
- FlowLayout.cs
- OdbcException.cs
- XmlSchemaValidationException.cs
- ColorTransformHelper.cs
- TableFieldsEditor.cs
- ContractType.cs
- DataObjectFieldAttribute.cs
- MultipleViewPattern.cs
- XNameTypeConverter.cs
- CodeAccessSecurityEngine.cs
- SQLStringStorage.cs
- GetKeyedHashRequest.cs
- ListBindingHelper.cs
- BaseParaClient.cs
- StrokeFIndices.cs
- EmptyReadOnlyDictionaryInternal.cs
- SqlTransaction.cs
- Column.cs
- ChannelDispatcher.cs
- DbConnectionPoolIdentity.cs
- BulletedList.cs
- XmlnsCompatibleWithAttribute.cs
- XmlProcessingInstruction.cs
- SpAudioStreamWrapper.cs
- AlphaSortedEnumConverter.cs
- State.cs
- MessageAction.cs
- Invariant.cs
- StyleCollection.cs
- RuleAction.cs
- FlowNode.cs
- FunctionImportMapping.cs
- ConfigurationLockCollection.cs
- BevelBitmapEffect.cs
- WebBrowserNavigatingEventHandler.cs
- CachedResourceDictionaryExtension.cs
- HtmlWindow.cs
- WebPartManager.cs
- MarshalByRefObject.cs
- PrinterUnitConvert.cs
- Stack.cs
- PageHandlerFactory.cs
- CodeObject.cs
- BookmarkResumptionRecord.cs
- ArraySortHelper.cs
- TableCellCollection.cs
- HGlobalSafeHandle.cs
- TextParaLineResult.cs
- ComponentEditorForm.cs
- SoundPlayerAction.cs
- DesignerActionMethodItem.cs
- XmlAttributes.cs
- StaticExtension.cs
- NullableDoubleMinMaxAggregationOperator.cs
- ZeroOpNode.cs
- DefaultBindingPropertyAttribute.cs
- User.cs
- VerificationException.cs
- FunctionImportMapping.cs
- dbenumerator.cs
- ExtendedTransformFactory.cs
- X509RecipientCertificateServiceElement.cs
- ColumnBinding.cs
- FilterableAttribute.cs
- WinEventTracker.cs
- SafeViewOfFileHandle.cs
- DockPattern.cs
- CssTextWriter.cs
- TypeGeneratedEventArgs.cs
- SessionIDManager.cs
- DBSqlParserTable.cs
- XMLSyntaxException.cs
- _SingleItemRequestCache.cs
- LicenseContext.cs
- TypeBrowser.xaml.cs
- HwndProxyElementProvider.cs
- Facet.cs
- WizardPanel.cs
- printdlgexmarshaler.cs
- InstanceLockLostException.cs
- NonClientArea.cs
- HtmlControlPersistable.cs
- PrtCap_Base.cs
- WindowsGrip.cs
- IndexedString.cs
- PathFigureCollectionConverter.cs
- WindowHideOrCloseTracker.cs
- FileUpload.cs
- KnownColorTable.cs
- ComponentDesigner.cs
- ImageFormatConverter.cs
- CustomTypeDescriptor.cs
- ModuleElement.cs
- CompositeCollection.cs
- TransferMode.cs
- DataFormat.cs
- ExpressionBuilder.cs
- SqlConnectionString.cs
- RSATokenProvider.cs
- WebHttpBindingCollectionElement.cs