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
- X509Extension.cs
- WindowsSpinner.cs
- ToolboxDataAttribute.cs
- ValuePattern.cs
- LambdaCompiler.Unary.cs
- DataPagerFieldCommandEventArgs.cs
- HttpFileCollectionWrapper.cs
- DesignerCapabilities.cs
- XmlSchemaCollection.cs
- CharacterMetricsDictionary.cs
- ToolBarButtonClickEvent.cs
- NetworkInformationPermission.cs
- TraceContextEventArgs.cs
- MeshGeometry3D.cs
- DeviceContexts.cs
- GlyphingCache.cs
- DataGridViewButtonColumn.cs
- WebBrowserProgressChangedEventHandler.cs
- MappedMetaModel.cs
- OperationInfoBase.cs
- SafeEventLogReadHandle.cs
- EmptyElement.cs
- SqlConnection.cs
- XmlNodeComparer.cs
- InputBinding.cs
- TripleDESCryptoServiceProvider.cs
- recordstate.cs
- DesignerActionUI.cs
- Interlocked.cs
- FontStyle.cs
- BufferedWebEventProvider.cs
- CSharpCodeProvider.cs
- ValidationErrorEventArgs.cs
- TextRenderingModeValidation.cs
- WebPartMenu.cs
- NavigationPropertyEmitter.cs
- LinqDataSourceUpdateEventArgs.cs
- CodeTypeOfExpression.cs
- CategoryAttribute.cs
- ModuleBuilder.cs
- TabPanel.cs
- mactripleDES.cs
- PageTheme.cs
- MultiPageTextView.cs
- ParallelQuery.cs
- CompositeDataBoundControl.cs
- FlowDocumentView.cs
- SchemaCollectionCompiler.cs
- COM2ICategorizePropertiesHandler.cs
- TypeRestriction.cs
- EventLogWatcher.cs
- BookmarkCallbackWrapper.cs
- CursorInteropHelper.cs
- SymLanguageType.cs
- WindowsProgressbar.cs
- SecurityElement.cs
- StorageConditionPropertyMapping.cs
- KnownIds.cs
- HandlerBase.cs
- ComPlusInstanceProvider.cs
- Figure.cs
- ShaderEffect.cs
- DispatcherFrame.cs
- HelpOperationInvoker.cs
- NavigatorInput.cs
- CodeTypeMemberCollection.cs
- ColorDialog.cs
- MembershipSection.cs
- GPRECTF.cs
- WindowsMenu.cs
- ThemeInfoAttribute.cs
- PointCollection.cs
- AssemblyAttributes.cs
- GlobalItem.cs
- HtmlTableRow.cs
- Help.cs
- LookupNode.cs
- SeekStoryboard.cs
- GreenMethods.cs
- InlinedAggregationOperator.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- SqlDataSourceEnumerator.cs
- AdPostCacheSubstitution.cs
- FlowPosition.cs
- WindowsAuthenticationEventArgs.cs
- HwndMouseInputProvider.cs
- NGCSerializerAsync.cs
- DependencyPropertyKind.cs
- HyperLink.cs
- IgnoreSection.cs
- DllNotFoundException.cs
- NavigatorOutput.cs
- ConfigurationSectionGroupCollection.cs
- TaiwanLunisolarCalendar.cs
- HtmlHead.cs
- StreamUpgradeBindingElement.cs
- ProfileBuildProvider.cs
- BaseDataListDesigner.cs
- WebPartMenu.cs
- isolationinterop.cs