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
- PauseStoryboard.cs
- CriticalFinalizerObject.cs
- ImageListImageEditor.cs
- SHA1Managed.cs
- StyleConverter.cs
- LambdaExpression.cs
- RequiredFieldValidator.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- WebHttpEndpointElement.cs
- WebPartExportVerb.cs
- Message.cs
- MouseActionConverter.cs
- CssClassPropertyAttribute.cs
- SQLDoubleStorage.cs
- EntityDataSourceQueryBuilder.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- WindowsSpinner.cs
- Vector3DValueSerializer.cs
- RegexMatch.cs
- Page.cs
- IdleTimeoutMonitor.cs
- DataGridViewLayoutData.cs
- METAHEADER.cs
- DoubleLink.cs
- ProcessHostConfigUtils.cs
- VirtualDirectoryMapping.cs
- DateTimeFormatInfoScanner.cs
- XmlCustomFormatter.cs
- SqlTypeSystemProvider.cs
- TemplateKey.cs
- SQLInt32Storage.cs
- EntityConnectionStringBuilder.cs
- WebPartConnection.cs
- EntityCommand.cs
- FormatterConverter.cs
- OdbcEnvironment.cs
- ILGen.cs
- LocatorManager.cs
- Point3DCollectionValueSerializer.cs
- EllipticalNodeOperations.cs
- MSAANativeProvider.cs
- DesignerDataStoredProcedure.cs
- OutputScopeManager.cs
- Crc32.cs
- XmlAnyElementAttributes.cs
- JournalEntry.cs
- Path.cs
- ContextQuery.cs
- SharedStatics.cs
- brushes.cs
- ByteConverter.cs
- _DisconnectOverlappedAsyncResult.cs
- FixedSOMTableRow.cs
- IssuedTokenServiceElement.cs
- ListDictionaryInternal.cs
- OleDbConnection.cs
- TableSectionStyle.cs
- DeferredTextReference.cs
- InspectionWorker.cs
- OracleColumn.cs
- CreateDataSourceDialog.cs
- XmlDownloadManager.cs
- UnknownBitmapDecoder.cs
- XmlHierarchyData.cs
- PropertyGridView.cs
- Renderer.cs
- MachineKeySection.cs
- RemotingConfiguration.cs
- DataSvcMapFileSerializer.cs
- PropVariant.cs
- GridItemProviderWrapper.cs
- ConsumerConnectionPointCollection.cs
- JsonClassDataContract.cs
- NameScopePropertyAttribute.cs
- X509Certificate2Collection.cs
- Win32Exception.cs
- RowBinding.cs
- ConnectionManagementElementCollection.cs
- sqlnorm.cs
- InstallerTypeAttribute.cs
- BindingNavigator.cs
- AttributeTable.cs
- InvalidDataException.cs
- AnonymousIdentificationSection.cs
- MatcherBuilder.cs
- TypeBuilderInstantiation.cs
- JoinQueryOperator.cs
- ProxyGenerationError.cs
- PkcsUtils.cs
- QueryReaderSettings.cs
- DbParameterCollectionHelper.cs
- HandleCollector.cs
- _NtlmClient.cs
- PartialClassGenerationTaskInternal.cs
- TypeConverters.cs
- ControlPaint.cs
- XpsViewerException.cs
- SoapReflectionImporter.cs
- ByteStreamMessageEncoder.cs
- EncoderFallback.cs