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
- Models.cs
- TimersDescriptionAttribute.cs
- WebControlAdapter.cs
- TdsParserStateObject.cs
- HostUtils.cs
- DrawingCollection.cs
- PassportAuthenticationModule.cs
- SelectionChangedEventArgs.cs
- BindingGraph.cs
- DbDataAdapter.cs
- MemoryPressure.cs
- DBDataPermission.cs
- TagNameToTypeMapper.cs
- CodeObjectCreateExpression.cs
- Tuple.cs
- CatalogZoneBase.cs
- MessageAction.cs
- JsonServiceDocumentSerializer.cs
- DataGridViewRowConverter.cs
- ThaiBuddhistCalendar.cs
- SemanticAnalyzer.cs
- AmbientLight.cs
- PTManager.cs
- XmlUtf8RawTextWriter.cs
- PackageRelationshipSelector.cs
- PropertyOrder.cs
- CompensationDesigner.cs
- XPathNavigator.cs
- DbProviderFactory.cs
- PagePropertiesChangingEventArgs.cs
- DesignerAdRotatorAdapter.cs
- ButtonAutomationPeer.cs
- BufferedWebEventProvider.cs
- PluralizationServiceUtil.cs
- PropertyEmitter.cs
- PermissionListSet.cs
- XslCompiledTransform.cs
- InputDevice.cs
- SQLStringStorage.cs
- ReliabilityContractAttribute.cs
- CellParagraph.cs
- PhysicalAddress.cs
- ListViewDeletedEventArgs.cs
- RC2.cs
- StringSource.cs
- ToolStripMenuItem.cs
- SchemaInfo.cs
- PhotoPrintingIntent.cs
- ViewManager.cs
- TypeToken.cs
- GPPOINT.cs
- CryptoStream.cs
- HttpServerProtocol.cs
- Stackframe.cs
- TextModifier.cs
- ErrorStyle.cs
- CompleteWizardStep.cs
- TypefaceMetricsCache.cs
- BamlWriter.cs
- SparseMemoryStream.cs
- TextEditorCopyPaste.cs
- relpropertyhelper.cs
- HttpHandlerActionCollection.cs
- TreeNodeCollection.cs
- InvalidComObjectException.cs
- EntityDataSourceChangingEventArgs.cs
- EventLogEntry.cs
- EmptyReadOnlyDictionaryInternal.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- Configuration.cs
- CodeAttributeDeclaration.cs
- Button.cs
- ProfilePropertySettingsCollection.cs
- SymbolEqualComparer.cs
- ValidatingPropertiesEventArgs.cs
- ValidationErrorCollection.cs
- SystemFonts.cs
- WhitespaceRule.cs
- EdmError.cs
- IconBitmapDecoder.cs
- ComboBox.cs
- Group.cs
- AutoGeneratedField.cs
- SystemTcpStatistics.cs
- ExtendedPropertyDescriptor.cs
- OraclePermission.cs
- MiniConstructorInfo.cs
- Relationship.cs
- GridViewHeaderRowPresenter.cs
- StructuredTypeEmitter.cs
- AsyncOperation.cs
- SByteStorage.cs
- WebBrowser.cs
- dtdvalidator.cs
- ClockController.cs
- Configuration.cs
- BufferModesCollection.cs
- DirectoryNotFoundException.cs
- ISFClipboardData.cs
- ScriptResourceInfo.cs