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
- PropertyCollection.cs
- TcpChannelListener.cs
- DataGridViewCellConverter.cs
- XmlAutoDetectWriter.cs
- OleDbStruct.cs
- ContractsBCL.cs
- _NegoStream.cs
- SpellerError.cs
- ToolStripScrollButton.cs
- VirtualPathUtility.cs
- HiddenFieldPageStatePersister.cs
- IndicShape.cs
- Transform3DGroup.cs
- ReceiveDesigner.xaml.cs
- GroupDescription.cs
- RegexTree.cs
- DataServiceConfiguration.cs
- ImageAttributes.cs
- VisualStyleTypesAndProperties.cs
- DecoderBestFitFallback.cs
- ScriptReference.cs
- Canvas.cs
- FormViewUpdatedEventArgs.cs
- SchemaHelper.cs
- CodeNamespaceImportCollection.cs
- NodeInfo.cs
- SBCSCodePageEncoding.cs
- ServiceProviders.cs
- TextElementEnumerator.cs
- _ChunkParse.cs
- FormViewInsertEventArgs.cs
- IList.cs
- ByteRangeDownloader.cs
- IApplicationTrustManager.cs
- WebPartDeleteVerb.cs
- ErrorWebPart.cs
- InputBindingCollection.cs
- ByteStreamMessageEncoderFactory.cs
- TextWriterEngine.cs
- HwndSource.cs
- WebRequest.cs
- ReadOnlyDictionary.cs
- CaseStatement.cs
- InternalControlCollection.cs
- RelationshipEnd.cs
- NamedPipeHostedTransportConfiguration.cs
- StringDictionary.cs
- ExpressionDumper.cs
- TypeDefinition.cs
- HScrollProperties.cs
- ProxyHwnd.cs
- TransformProviderWrapper.cs
- HttpServerUtilityWrapper.cs
- TrackingConditionCollection.cs
- ConfigurationSectionCollection.cs
- QuestionEventArgs.cs
- SqlMethodAttribute.cs
- OciHandle.cs
- OutputCacheSettingsSection.cs
- WebBrowserNavigatingEventHandler.cs
- SmtpReplyReader.cs
- ModelService.cs
- Propagator.ExtentPlaceholderCreator.cs
- DesignerEventService.cs
- AuthenticationService.cs
- ILGenerator.cs
- TranslateTransform.cs
- ExplicitDiscriminatorMap.cs
- MulticastNotSupportedException.cs
- MarkupCompiler.cs
- XmlBoundElement.cs
- ClientSettingsProvider.cs
- ComponentSerializationService.cs
- CollectionConverter.cs
- UnescapedXmlDiagnosticData.cs
- ApplicationSecurityManager.cs
- ForwardPositionQuery.cs
- SecurityTokenResolver.cs
- SetterBase.cs
- ObjectDisposedException.cs
- NetNamedPipeSecurity.cs
- HeaderedItemsControl.cs
- XmlWriterSettings.cs
- BinaryFormatterWriter.cs
- WebPartCancelEventArgs.cs
- RootProfilePropertySettingsCollection.cs
- FloaterBaseParagraph.cs
- _LoggingObject.cs
- FormattedTextSymbols.cs
- IntegrationExceptionEventArgs.cs
- XmlSchemaInferenceException.cs
- MimeMapping.cs
- ResourceSetExpression.cs
- Group.cs
- AttachedAnnotation.cs
- FixedSOMTable.cs
- FormsAuthenticationModule.cs
- EdmType.cs
- xdrvalidator.cs
- ApplicationDirectory.cs