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
- DataRelationPropertyDescriptor.cs
- InfiniteIntConverter.cs
- RoutedPropertyChangedEventArgs.cs
- Input.cs
- DBSchemaRow.cs
- TransactionFlowAttribute.cs
- securitycriticaldataformultiplegetandset.cs
- DocumentXmlWriter.cs
- DrawListViewSubItemEventArgs.cs
- ReflectionTypeLoadException.cs
- SafeWaitHandle.cs
- PropagatorResult.cs
- SequenceNumber.cs
- DataGridItemCollection.cs
- EastAsianLunisolarCalendar.cs
- TextEditorThreadLocalStore.cs
- TrustDriver.cs
- SynthesizerStateChangedEventArgs.cs
- FixedSOMFixedBlock.cs
- CompositionAdorner.cs
- __FastResourceComparer.cs
- RectKeyFrameCollection.cs
- DisableDpiAwarenessAttribute.cs
- RedirectionProxy.cs
- ByteAnimationBase.cs
- CodeLinePragma.cs
- ContainerUtilities.cs
- ExpressionBuilder.cs
- LocatorManager.cs
- DynamicValidatorEventArgs.cs
- X509CertificateTrustedIssuerElementCollection.cs
- DynamicRendererThreadManager.cs
- DescendentsWalkerBase.cs
- SerializationEventsCache.cs
- RuntimeHandles.cs
- ScriptResourceInfo.cs
- SortedSet.cs
- PropertyBuilder.cs
- TextSpan.cs
- SoapFault.cs
- MyContact.cs
- ScriptBehaviorDescriptor.cs
- VirtualizedItemProviderWrapper.cs
- ProcessThreadCollection.cs
- FontEditor.cs
- nulltextcontainer.cs
- ExeConfigurationFileMap.cs
- AdRotator.cs
- Crypto.cs
- SerializationStore.cs
- ExecutionContext.cs
- AnnotationElement.cs
- TextChangedEventArgs.cs
- DocumentOrderQuery.cs
- FileSecurity.cs
- MatrixTransform.cs
- RadioButton.cs
- IndentedWriter.cs
- WindowsListViewSubItem.cs
- NestedContainer.cs
- ReferencedType.cs
- RequestCachingSection.cs
- InkCanvas.cs
- MaskDescriptor.cs
- PageBreakRecord.cs
- DataFieldEditor.cs
- JavascriptCallbackMessageInspector.cs
- HostingEnvironmentException.cs
- IListConverters.cs
- JsonDataContract.cs
- CheckBox.cs
- Propagator.JoinPropagator.cs
- ResourceDescriptionAttribute.cs
- XmlReaderSettings.cs
- TreeViewHitTestInfo.cs
- ScrollBar.cs
- SafeRsaProviderHandle.cs
- TableItemStyle.cs
- PackWebRequestFactory.cs
- CornerRadius.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- Geometry3D.cs
- BinaryObjectReader.cs
- XmlQueryCardinality.cs
- PeerNameRegistration.cs
- XmlMembersMapping.cs
- StateDesigner.Layouts.cs
- PermissionSet.cs
- SymbolEqualComparer.cs
- XmlDocumentType.cs
- MenuItemStyleCollection.cs
- ProfileSection.cs
- PngBitmapDecoder.cs
- SqlDuplicator.cs
- XamlParser.cs
- WebMethodAttribute.cs
- ConnectionConsumerAttribute.cs
- BamlMapTable.cs
- DependencyObject.cs
- UpdateEventArgs.cs