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
- ItemsChangedEventArgs.cs
- IgnoreFlushAndCloseStream.cs
- DistributedTransactionPermission.cs
- PagePropertiesChangingEventArgs.cs
- MemoryStream.cs
- PseudoWebRequest.cs
- UriSection.cs
- RegexTypeEditor.cs
- CodeAttributeArgument.cs
- PointCollection.cs
- DictionarySectionHandler.cs
- MexTcpBindingCollectionElement.cs
- NavigationPropertyEmitter.cs
- ProtocolsConfigurationHandler.cs
- TextEditorTyping.cs
- WebConfigurationHostFileChange.cs
- MaskedTextProvider.cs
- DataViewManagerListItemTypeDescriptor.cs
- SectionVisual.cs
- ProcessProtocolHandler.cs
- LabelDesigner.cs
- TargetParameterCountException.cs
- IssuedTokensHeader.cs
- XmlDocumentSchema.cs
- OdbcConnection.cs
- TextEditorSpelling.cs
- ReflectionUtil.cs
- DetailsViewUpdateEventArgs.cs
- QueryStack.cs
- RegexFCD.cs
- RadioButton.cs
- FontInfo.cs
- ThumbButtonInfo.cs
- Rule.cs
- ByteStorage.cs
- BoolExpr.cs
- DesignRelationCollection.cs
- SyntaxCheck.cs
- SoapEnvelopeProcessingElement.cs
- StructuredTypeEmitter.cs
- PathStreamGeometryContext.cs
- ItemsPanelTemplate.cs
- PageThemeBuildProvider.cs
- DateTimeOffsetAdapter.cs
- WorkItem.cs
- TokenBasedSet.cs
- UrlMappingsModule.cs
- TemplatePagerField.cs
- EmbeddedMailObjectsCollection.cs
- CommunicationObjectAbortedException.cs
- DesignOnlyAttribute.cs
- MetafileHeaderWmf.cs
- TransformGroup.cs
- DropSource.cs
- TreeNodeStyle.cs
- TextElementEditingBehaviorAttribute.cs
- ButtonFieldBase.cs
- ViewStateModeByIdAttribute.cs
- HyperLinkColumn.cs
- DataBoundControl.cs
- Peer.cs
- NonParentingControl.cs
- RemotingServices.cs
- HwndSubclass.cs
- Model3DGroup.cs
- PointCollection.cs
- GridView.cs
- CodeExporter.cs
- ImageBrush.cs
- KeysConverter.cs
- CodeTypeReferenceCollection.cs
- DynamicResourceExtensionConverter.cs
- PointCollection.cs
- DiagnosticStrings.cs
- ProtocolViolationException.cs
- SizeConverter.cs
- LayoutEvent.cs
- CompositeDuplexElement.cs
- SoapWriter.cs
- CharKeyFrameCollection.cs
- ParsedAttributeCollection.cs
- LinqDataSourceDisposeEventArgs.cs
- PackagingUtilities.cs
- RemoteCryptoTokenProvider.cs
- LinqDataSourceContextData.cs
- DataBoundControlHelper.cs
- odbcmetadatacollectionnames.cs
- ToolStripContainer.cs
- StylusPointProperties.cs
- WindowsFont.cs
- ClientConfigPaths.cs
- UnaryExpression.cs
- SQLGuidStorage.cs
- FontSizeConverter.cs
- WebPartManagerInternals.cs
- NullableDoubleAverageAggregationOperator.cs
- TabControlCancelEvent.cs
- TreeViewEvent.cs
- TraceSection.cs
- AttachedAnnotationChangedEventArgs.cs