Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / Core / SecureStringHasher.cs / 1 / SecureStringHasher.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; namespace System.Xml { // SecureStringHasher is a hash code provider for strings. The hash codes calculation starts with a seed (hasCodeRandomizer) which is usually // different for each instance of SecureStringHasher. Since the hash code depend on the seed, the chance of hashtable DoS attack in case when // someone passes in lots of strings that hash to the same hash code is greatly reduced. // The SecureStringHasher implements IEqualityComparer for strings and therefore can be used in generic IDictionary. internal class SecureStringHasher : IEqualityComparer{ int hashCodeRandomizer; public SecureStringHasher() { this.hashCodeRandomizer = Environment.TickCount; } public SecureStringHasher( int hashCodeRandomizer ) { this.hashCodeRandomizer = hashCodeRandomizer; } public int Compare( String x, String y ) { return String.Compare(x, y, StringComparison.Ordinal); } public bool Equals( String x, String y ) { return String.Equals( x, y, StringComparison.Ordinal ); } public int GetHashCode( String key ) { int hashCode = hashCodeRandomizer; // use key.Length to eliminate the rangecheck for ( int i = 0; i < key.Length; i++ ) { hashCode += ( hashCode << 7 ) ^ key[i]; } // mix it a bit more hashCode -= hashCode >> 17; hashCode -= hashCode >> 11; hashCode -= hashCode >> 5; return hashCode; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; namespace System.Xml { // SecureStringHasher is a hash code provider for strings. The hash codes calculation starts with a seed (hasCodeRandomizer) which is usually // different for each instance of SecureStringHasher. Since the hash code depend on the seed, the chance of hashtable DoS attack in case when // someone passes in lots of strings that hash to the same hash code is greatly reduced. // The SecureStringHasher implements IEqualityComparer for strings and therefore can be used in generic IDictionary. internal class SecureStringHasher : IEqualityComparer{ int hashCodeRandomizer; public SecureStringHasher() { this.hashCodeRandomizer = Environment.TickCount; } public SecureStringHasher( int hashCodeRandomizer ) { this.hashCodeRandomizer = hashCodeRandomizer; } public int Compare( String x, String y ) { return String.Compare(x, y, StringComparison.Ordinal); } public bool Equals( String x, String y ) { return String.Equals( x, y, StringComparison.Ordinal ); } public int GetHashCode( String key ) { int hashCode = hashCodeRandomizer; // use key.Length to eliminate the rangecheck for ( int i = 0; i < key.Length; i++ ) { hashCode += ( hashCode << 7 ) ^ key[i]; } // mix it a bit more hashCode -= hashCode >> 17; hashCode -= hashCode >> 11; hashCode -= hashCode >> 5; return hashCode; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlNodeReader.cs
- CheckBoxField.cs
- _ListenerResponseStream.cs
- Size.cs
- WaitForChangedResult.cs
- UserPersonalizationStateInfo.cs
- XamlInt32CollectionSerializer.cs
- NodeLabelEditEvent.cs
- SignatureToken.cs
- Pkcs9Attribute.cs
- MachineKeyValidationConverter.cs
- ManualResetEvent.cs
- Pair.cs
- CriticalExceptions.cs
- SoapConverter.cs
- ReceiveContext.cs
- ConfigUtil.cs
- SchemaImporter.cs
- _HeaderInfoTable.cs
- MenuItemCollection.cs
- PropertyEmitter.cs
- DynamicActivityTypeDescriptor.cs
- DocumentsTrace.cs
- WebEvents.cs
- VerificationAttribute.cs
- Signature.cs
- FieldNameLookup.cs
- CodeIdentifier.cs
- SessionPageStatePersister.cs
- CheckoutException.cs
- ValidatingReaderNodeData.cs
- HashRepartitionStream.cs
- WinEventTracker.cs
- ArrayWithOffset.cs
- TypedReference.cs
- FixedSOMSemanticBox.cs
- RewritingValidator.cs
- MsmqBindingBase.cs
- Message.cs
- ParentUndoUnit.cs
- ContextItemManager.cs
- DnsPermission.cs
- Binding.cs
- WizardDesigner.cs
- WindowsStatic.cs
- TextRangeBase.cs
- IIS7WorkerRequest.cs
- XmlChoiceIdentifierAttribute.cs
- WebPartDisplayMode.cs
- securestring.cs
- BitmapData.cs
- BaseTemplateParser.cs
- BeginStoryboard.cs
- XmlLanguage.cs
- EncoderParameter.cs
- EffectiveValueEntry.cs
- EventListener.cs
- HMACSHA512.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TextEndOfLine.cs
- assertwrapper.cs
- XmlDigitalSignatureProcessor.cs
- XmlWriterSettings.cs
- PageContent.cs
- __Error.cs
- HttpServerChannel.cs
- FlowDocumentFormatter.cs
- SubMenuStyle.cs
- DefaultEvaluationContext.cs
- NullableDecimalAverageAggregationOperator.cs
- ClientTargetCollection.cs
- SafeNativeMethods.cs
- PinProtectionHelper.cs
- cache.cs
- Directory.cs
- CaseCqlBlock.cs
- SqlClientPermission.cs
- PropertyValueUIItem.cs
- UnknownBitmapDecoder.cs
- CustomErrorCollection.cs
- CleanUpVirtualizedItemEventArgs.cs
- GeometryConverter.cs
- StringFunctions.cs
- ResourceLoader.cs
- AppearanceEditorPart.cs
- HttpCookieCollection.cs
- TextRunCacheImp.cs
- PhoneCallDesigner.cs
- RegexBoyerMoore.cs
- TypedServiceOperationListItem.cs
- LiteralTextParser.cs
- SecureConversationSecurityTokenParameters.cs
- MachineKeySection.cs
- XPathNavigatorKeyComparer.cs
- DesignerDeviceConfig.cs
- Encoder.cs
- ReflectionTypeLoadException.cs
- RuntimeHelpers.cs
- ObjectDataSource.cs
- XPathNodeIterator.cs