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
- ValueUnavailableException.cs
- GlobalProxySelection.cs
- DisplayInformation.cs
- AsynchronousChannelMergeEnumerator.cs
- DocumentPropertiesDialog.cs
- HttpCapabilitiesEvaluator.cs
- DesignBindingConverter.cs
- Pair.cs
- TextElementCollection.cs
- peernodeimplementation.cs
- SizeConverter.cs
- DependencyObjectProvider.cs
- MobileCategoryAttribute.cs
- ListViewItem.cs
- ToolConsole.cs
- Buffer.cs
- DesignerWidgets.cs
- PermissionSet.cs
- Vector3DAnimationUsingKeyFrames.cs
- OracleCommand.cs
- GridViewItemAutomationPeer.cs
- TextHidden.cs
- ErrorRuntimeConfig.cs
- StaticDataManager.cs
- SafeLocalMemHandle.cs
- SiteMembershipCondition.cs
- SiteMapNodeItemEventArgs.cs
- SoapExtension.cs
- MaskedTextBoxTextEditor.cs
- WbmpConverter.cs
- ExtendedPropertyDescriptor.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- EntityDesignerBuildProvider.cs
- UnsafeNativeMethods.cs
- DynamicValidatorEventArgs.cs
- DynamicValidatorEventArgs.cs
- RoutedCommand.cs
- SystemIcmpV4Statistics.cs
- ScriptServiceAttribute.cs
- EnvelopedPkcs7.cs
- DynamicResourceExtension.cs
- HandlerMappingMemo.cs
- DoubleLinkListEnumerator.cs
- CompilationSection.cs
- HebrewNumber.cs
- UnsafeNativeMethods.cs
- ReachDocumentSequenceSerializerAsync.cs
- SortedDictionary.cs
- SqlReferenceCollection.cs
- CommandField.cs
- FixedPosition.cs
- Constraint.cs
- ConfigurationLoader.cs
- MdiWindowListStrip.cs
- SchemaTableColumn.cs
- MouseGesture.cs
- ContentPathSegment.cs
- ContentHostHelper.cs
- ConfigurationStrings.cs
- DefaultSection.cs
- ConcurrencyBehavior.cs
- panel.cs
- DataBindingCollectionEditor.cs
- FillErrorEventArgs.cs
- PreservationFileWriter.cs
- Stroke2.cs
- CodeExporter.cs
- ArcSegment.cs
- WebPartsSection.cs
- CharUnicodeInfo.cs
- FixedDSBuilder.cs
- DBNull.cs
- ToolStripContentPanel.cs
- WebExceptionStatus.cs
- WorkflowFormatterBehavior.cs
- TransformValueSerializer.cs
- GeneralTransform3D.cs
- JsonFormatGeneratorStatics.cs
- DefaultMergeHelper.cs
- ContextMarshalException.cs
- FormViewModeEventArgs.cs
- XsltFunctions.cs
- ConnectionManagementElement.cs
- SqlFunctionAttribute.cs
- HttpCookieCollection.cs
- XPathConvert.cs
- HttpCachePolicy.cs
- ChangePassword.cs
- FontFamilyValueSerializer.cs
- SimpleMailWebEventProvider.cs
- OptimizedTemplateContent.cs
- HttpConfigurationContext.cs
- PropertyAccessVisitor.cs
- QueryAccessibilityHelpEvent.cs
- XmlBufferReader.cs
- SqlExpressionNullability.cs
- WSFederationHttpBinding.cs
- ParameterCollection.cs
- VirtualizedItemPattern.cs
- OracleConnectionFactory.cs