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
- EncryptedKey.cs
- AnnotationComponentManager.cs
- HebrewCalendar.cs
- PackageFilter.cs
- RuntimeWrappedException.cs
- processwaithandle.cs
- PolyLineSegmentFigureLogic.cs
- IndicCharClassifier.cs
- safelinkcollection.cs
- mansign.cs
- WeakRefEnumerator.cs
- SizeValueSerializer.cs
- ImageSourceConverter.cs
- IdentityModelStringsVersion1.cs
- XmlSchemaObject.cs
- ApplicationSecurityManager.cs
- UIElementCollection.cs
- DbConnectionOptions.cs
- StringHelper.cs
- ProcessModuleDesigner.cs
- BitmapEncoder.cs
- MILUtilities.cs
- RelationshipEndCollection.cs
- ObjectManager.cs
- WebReferencesBuildProvider.cs
- TextEditorMouse.cs
- DesignRelation.cs
- CompilerWrapper.cs
- CursorConverter.cs
- SiteMapSection.cs
- CopyAction.cs
- WindowsRegion.cs
- SmtpCommands.cs
- DataColumnPropertyDescriptor.cs
- SingleAnimationBase.cs
- ParameterBinding.cs
- UInt16Converter.cs
- DataBoundControlAdapter.cs
- ExceptionUtil.cs
- RealProxy.cs
- Events.cs
- PcmConverter.cs
- ExtensibleClassFactory.cs
- LocalsItemDescription.cs
- ModelItemDictionary.cs
- FormViewDeleteEventArgs.cs
- TableParaClient.cs
- SmiGettersStream.cs
- TypeNameConverter.cs
- SID.cs
- COAUTHINFO.cs
- CfgArc.cs
- DesignerTransaction.cs
- PropertyValueChangedEvent.cs
- CryptoHelper.cs
- TableRow.cs
- ControlPropertyNameConverter.cs
- SliderAutomationPeer.cs
- GeneralTransform3DCollection.cs
- DataBindingHandlerAttribute.cs
- streamingZipPartStream.cs
- XmlSchemaSimpleTypeUnion.cs
- DifferencingCollection.cs
- UnsafeNativeMethods.cs
- TextAction.cs
- ScrollData.cs
- CacheModeValueSerializer.cs
- BuildDependencySet.cs
- StateManagedCollection.cs
- exports.cs
- ObjectAnimationUsingKeyFrames.cs
- exports.cs
- MultiDataTrigger.cs
- PartialList.cs
- UnSafeCharBuffer.cs
- mansign.cs
- _PooledStream.cs
- ObjectContextServiceProvider.cs
- MouseGesture.cs
- GreaterThan.cs
- ItemsChangedEventArgs.cs
- CommandValueSerializer.cs
- ToolStripContainer.cs
- dataobject.cs
- Timer.cs
- EntityDesignerUtils.cs
- GetPageCompletedEventArgs.cs
- CacheDependency.cs
- ContainerParaClient.cs
- StreamUpgradeBindingElement.cs
- Base64Encoder.cs
- TypeDescriptor.cs
- TreeView.cs
- WebDisplayNameAttribute.cs
- ClusterSafeNativeMethods.cs
- DataGridItemEventArgs.cs
- StringConcat.cs
- ExcludePathInfo.cs
- IndentedTextWriter.cs
- XPathMultyIterator.cs