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
- WindowsAuthenticationModule.cs
- ManagementPath.cs
- AdornerLayer.cs
- SectionXmlInfo.cs
- ResourceDictionaryCollection.cs
- WeakReadOnlyCollection.cs
- ReflectTypeDescriptionProvider.cs
- LogStore.cs
- COM2IProvidePropertyBuilderHandler.cs
- PowerStatus.cs
- DbConvert.cs
- InstanceHandle.cs
- Roles.cs
- CryptoApi.cs
- ProfileParameter.cs
- BufferModesCollection.cs
- MessageContractMemberAttribute.cs
- BaseProcessor.cs
- IndexingContentUnit.cs
- GeneralTransform3DCollection.cs
- WorkflowServiceNamespace.cs
- Int32CollectionConverter.cs
- ProcessInfo.cs
- DescendantBaseQuery.cs
- DoubleLinkList.cs
- BamlReader.cs
- LineGeometry.cs
- DrawListViewSubItemEventArgs.cs
- FixedTextSelectionProcessor.cs
- VScrollProperties.cs
- HttpListener.cs
- WmlTextViewAdapter.cs
- CompoundFileReference.cs
- ProtocolsConfigurationHandler.cs
- WindowsAltTab.cs
- ValueUnavailableException.cs
- SqlBooleanMismatchVisitor.cs
- ConnectionsZone.cs
- TypeSystemHelpers.cs
- MemoryMappedViewStream.cs
- Pair.cs
- CollectionChangedEventManager.cs
- DbProviderFactories.cs
- InkCanvasAutomationPeer.cs
- Byte.cs
- LineBreakRecord.cs
- DocumentOrderQuery.cs
- UserControl.cs
- PageHandlerFactory.cs
- UpdateManifestForBrowserApplication.cs
- MonikerProxyAttribute.cs
- codemethodreferenceexpression.cs
- Converter.cs
- UnsafeNativeMethods.cs
- HostVisual.cs
- Catch.cs
- UserInitiatedRoutedEventPermission.cs
- PassportIdentity.cs
- ComplexPropertyEntry.cs
- CodeMemberProperty.cs
- TCPClient.cs
- XmlComment.cs
- KnownAssemblyEntry.cs
- TraceContextEventArgs.cs
- ResourceSetExpression.cs
- MembershipValidatePasswordEventArgs.cs
- SessionEndingEventArgs.cs
- CollectionEditor.cs
- ProtocolInformationReader.cs
- unsafenativemethodstextservices.cs
- DocumentViewerBaseAutomationPeer.cs
- Stack.cs
- OdbcUtils.cs
- cookieexception.cs
- UpdateCompiler.cs
- BrowserCapabilitiesCodeGenerator.cs
- InfiniteTimeSpanConverter.cs
- TableAdapterManagerHelper.cs
- WebServiceEnumData.cs
- FileNotFoundException.cs
- KoreanCalendar.cs
- ExpressionBuilderCollection.cs
- ColorTransformHelper.cs
- ComPlusTraceRecord.cs
- FolderNameEditor.cs
- MarginsConverter.cs
- QuaternionAnimationUsingKeyFrames.cs
- CancelEventArgs.cs
- Condition.cs
- FocusManager.cs
- AppDomainUnloadedException.cs
- WebPartTransformerAttribute.cs
- SmtpSection.cs
- ParserExtension.cs
- SingleTagSectionHandler.cs
- _CommandStream.cs
- DataGridRow.cs
- ServicePointManagerElement.cs
- CorePropertiesFilter.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs