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
- FocusWithinProperty.cs
- CompilerInfo.cs
- QueryAccessibilityHelpEvent.cs
- Socket.cs
- mediapermission.cs
- ParameterCollection.cs
- TypeElementCollection.cs
- KeyTimeConverter.cs
- BindingUtils.cs
- DataListItemCollection.cs
- ObjectListField.cs
- LinkLabelLinkClickedEvent.cs
- SHA256CryptoServiceProvider.cs
- CachedCompositeFamily.cs
- GridViewColumn.cs
- BitmapEffectInput.cs
- ButtonFieldBase.cs
- SafeProcessHandle.cs
- TableChangeProcessor.cs
- GraphicsContext.cs
- Rule.cs
- WindowsButton.cs
- ChangeInterceptorAttribute.cs
- CheckBoxBaseAdapter.cs
- SafePointer.cs
- DelimitedListTraceListener.cs
- SequentialOutput.cs
- WebPartCatalogCloseVerb.cs
- IDQuery.cs
- DataTemplate.cs
- DrawListViewItemEventArgs.cs
- SmiRecordBuffer.cs
- ExternalCalls.cs
- unsafeIndexingFilterStream.cs
- IFlowDocumentViewer.cs
- CustomErrorsSection.cs
- MULTI_QI.cs
- TypeConverters.cs
- ToolStripDropTargetManager.cs
- IPAddressCollection.cs
- PrintingPermission.cs
- RoleService.cs
- ParserOptions.cs
- SelectionRangeConverter.cs
- JsonSerializer.cs
- wgx_render.cs
- ExecutionScope.cs
- ImageCodecInfo.cs
- DataGridTableCollection.cs
- MobileCapabilities.cs
- SetterBaseCollection.cs
- DiscoveryVersionConverter.cs
- PropertySet.cs
- SslStreamSecurityUpgradeProvider.cs
- TemplateAction.cs
- SafeNativeMethodsMilCoreApi.cs
- ResourceWriter.cs
- TriggerActionCollection.cs
- PageCodeDomTreeGenerator.cs
- ResourceWriter.cs
- XmlMtomReader.cs
- OrderedEnumerableRowCollection.cs
- figurelengthconverter.cs
- TextTreeExtractElementUndoUnit.cs
- HwndSourceParameters.cs
- OleDbConnectionFactory.cs
- WindowsGraphicsWrapper.cs
- control.ime.cs
- GenericTextProperties.cs
- Tag.cs
- XXXOnTypeBuilderInstantiation.cs
- ColumnMapProcessor.cs
- DbParameterCollectionHelper.cs
- FigureParaClient.cs
- FileAuthorizationModule.cs
- ReflectionUtil.cs
- Activity.cs
- ServiceDescription.cs
- PagedDataSource.cs
- FixUp.cs
- InternalsVisibleToAttribute.cs
- XmlSerializerAssemblyAttribute.cs
- IncrementalReadDecoders.cs
- ErrorFormatter.cs
- StylusPlugInCollection.cs
- LeftCellWrapper.cs
- ZoneIdentityPermission.cs
- HtmlHead.cs
- WindowsListViewSubItem.cs
- XmlSignatureManifest.cs
- NamedPipeChannelFactory.cs
- SplashScreenNativeMethods.cs
- WebBrowser.cs
- Point3DValueSerializer.cs
- ContentElementCollection.cs
- TraceLog.cs
- PerformanceCounterManager.cs
- ConstantExpression.cs
- OnOperation.cs
- CodeNamespaceCollection.cs