Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / Core / SecureStringHasher.cs / 1305376 / 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; } #if false // This is here only for debugging of hashing issues public SecureStringHasher( int hashCodeRandomizer ) { this.hashCodeRandomizer = hashCodeRandomizer; } #endif 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; } #if false // This is here only for debugging of hashing issues public SecureStringHasher( int hashCodeRandomizer ) { this.hashCodeRandomizer = hashCodeRandomizer; } #endif 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
- Nodes.cs
- UpdateException.cs
- XmlSchemaSubstitutionGroup.cs
- SqlResolver.cs
- CollectionBuilder.cs
- Baml2006Reader.cs
- HtmlInputCheckBox.cs
- StatusBarAutomationPeer.cs
- TraceListener.cs
- PointLight.cs
- HMACSHA256.cs
- IPipelineRuntime.cs
- CollectionViewProxy.cs
- DataGridPreparingCellForEditEventArgs.cs
- InfoCardSymmetricCrypto.cs
- DynamicValidatorEventArgs.cs
- DataGridLinkButton.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ProjectionCamera.cs
- LambdaValue.cs
- ViewStateChangedEventArgs.cs
- MsdtcWrapper.cs
- KeyConverter.cs
- KnownTypes.cs
- ObjectDataSourceDisposingEventArgs.cs
- SingleConverter.cs
- ChannelManagerHelpers.cs
- CounterCreationData.cs
- ListControl.cs
- DispatcherHookEventArgs.cs
- Pair.cs
- NamespaceInfo.cs
- IList.cs
- TemplateParser.cs
- DependencyProperty.cs
- XmlSchemaAttributeGroup.cs
- ServerIdentity.cs
- ClosableStream.cs
- KeyEventArgs.cs
- DateTimeValueSerializer.cs
- StickyNoteContentControl.cs
- FlowDocumentReaderAutomationPeer.cs
- ImportContext.cs
- IsolatedStorageFile.cs
- Column.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- WebControlsSection.cs
- RoleManagerEventArgs.cs
- Assembly.cs
- Evaluator.cs
- TextBox.cs
- Message.cs
- DesignerProperties.cs
- Int32EqualityComparer.cs
- XhtmlBasicLabelAdapter.cs
- BasicExpandProvider.cs
- StructuralObject.cs
- AssertFilter.cs
- MobileUserControl.cs
- ObjectStateEntry.cs
- EasingQuaternionKeyFrame.cs
- RuleInfoComparer.cs
- MulticastDelegate.cs
- AdjustableArrowCap.cs
- ErrorFormatterPage.cs
- EastAsianLunisolarCalendar.cs
- ConfigurationValidatorBase.cs
- RedirectionProxy.cs
- MsmqException.cs
- CompositeControlDesigner.cs
- UInt64Converter.cs
- ListControl.cs
- XmlIlTypeHelper.cs
- ExecutionEngineException.cs
- SmtpClient.cs
- TextRangeEditLists.cs
- MultipleCopiesCollection.cs
- DataViewManagerListItemTypeDescriptor.cs
- LogLogRecordEnumerator.cs
- TreeViewAutomationPeer.cs
- SQLSingle.cs
- FlowchartStart.xaml.cs
- ExpressionBindingsDialog.cs
- VerbConverter.cs
- FixedHighlight.cs
- XPathNodeInfoAtom.cs
- DBCSCodePageEncoding.cs
- RoutedUICommand.cs
- BoundPropertyEntry.cs
- EdmConstants.cs
- ToolStripItemTextRenderEventArgs.cs
- PropertyPathWorker.cs
- FormParameter.cs
- HtmlTextViewAdapter.cs
- TouchesCapturedWithinProperty.cs
- MetafileHeaderWmf.cs
- IpcClientChannel.cs
- XPathDescendantIterator.cs
- XmlSchemaSimpleTypeUnion.cs
- Sql8ConformanceChecker.cs