Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- CoTaskMemHandle.cs
- State.cs
- ResourcePart.cs
- SystemResources.cs
- ObjectStorage.cs
- SecurityTokenProvider.cs
- EventLogEntry.cs
- WaitHandle.cs
- NullRuntimeConfig.cs
- SwitchDesigner.xaml.cs
- NativeMethods.cs
- AppSettingsExpressionEditor.cs
- DriveNotFoundException.cs
- InstanceDescriptor.cs
- PropertyEntry.cs
- recordstate.cs
- ListViewSelectEventArgs.cs
- bindurihelper.cs
- MetadataCacheItem.cs
- HtmlElementCollection.cs
- ImageCodecInfoPrivate.cs
- ServicesUtilities.cs
- EntityTemplateFactory.cs
- RepeaterCommandEventArgs.cs
- Regex.cs
- GridViewDeletedEventArgs.cs
- InputMethodStateChangeEventArgs.cs
- HttpAsyncResult.cs
- CachedFontFamily.cs
- ByteAnimationBase.cs
- ServiceDeploymentInfo.cs
- IdentityModelStringsVersion1.cs
- SynchronizationFilter.cs
- NotFiniteNumberException.cs
- XmlNamespaceMappingCollection.cs
- NavigationService.cs
- ImageButton.cs
- ProfileGroupSettings.cs
- CodeExpressionCollection.cs
- XmlSchemaComplexContentRestriction.cs
- ConfigXmlElement.cs
- WindowsScroll.cs
- IPEndPointCollection.cs
- ZoneButton.cs
- XmlAutoDetectWriter.cs
- Config.cs
- HttpModuleActionCollection.cs
- TransportContext.cs
- Processor.cs
- HyperLinkColumn.cs
- SqlClientFactory.cs
- ParenthesizePropertyNameAttribute.cs
- InstancePersistenceContext.cs
- ClipboardProcessor.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- DrawingCollection.cs
- Vector3DCollection.cs
- QueryStringConverter.cs
- MultiAsyncResult.cs
- ItemList.cs
- Sql8ConformanceChecker.cs
- IndicCharClassifier.cs
- WizardPanel.cs
- TreeBuilder.cs
- TouchPoint.cs
- Journaling.cs
- MimeObjectFactory.cs
- Transform3D.cs
- DataSourceXmlElementAttribute.cs
- XmlILIndex.cs
- MetadataItemCollectionFactory.cs
- BoundsDrawingContextWalker.cs
- DataGridCaption.cs
- CommandValueSerializer.cs
- RawStylusInputCustomDataList.cs
- PageTheme.cs
- CompoundFileStorageReference.cs
- SID.cs
- Not.cs
- TreeIterator.cs
- InputBindingCollection.cs
- RegistryKey.cs
- DigestTraceRecordHelper.cs
- ProtocolsSection.cs
- TypeUsage.cs
- IriParsingElement.cs
- _AuthenticationState.cs
- SimpleWebHandlerParser.cs
- GenerateTemporaryTargetAssembly.cs
- CancellableEnumerable.cs
- WsdlServiceChannelBuilder.cs
- SizeFConverter.cs
- EntityClientCacheEntry.cs
- RegisteredScript.cs
- InstanceKeyCompleteException.cs
- WindowsFont.cs
- ButtonRenderer.cs
- TextTreeRootNode.cs
- SmiRequestExecutor.cs
- RectangleConverter.cs