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
- CustomAttributeFormatException.cs
- Rotation3DKeyFrameCollection.cs
- BufferedGraphics.cs
- LogicalExpressionTypeConverter.cs
- dataprotectionpermission.cs
- WCFBuildProvider.cs
- ColorTransform.cs
- EditorBrowsableAttribute.cs
- DetailsViewInsertedEventArgs.cs
- SqlInternalConnection.cs
- XmlSubtreeReader.cs
- ProcessStartInfo.cs
- ResourceContainer.cs
- StringFormat.cs
- EncoderExceptionFallback.cs
- XPathChildIterator.cs
- WmlPageAdapter.cs
- SharedPerformanceCounter.cs
- StringDictionary.cs
- FunctionImportElement.cs
- GlyphingCache.cs
- RelatedPropertyManager.cs
- ValidationUtility.cs
- APCustomTypeDescriptor.cs
- HostingEnvironmentSection.cs
- BamlRecordHelper.cs
- MtomMessageEncoder.cs
- FixedTextContainer.cs
- DragEventArgs.cs
- MemberInfoSerializationHolder.cs
- AppLevelCompilationSectionCache.cs
- BoundField.cs
- ComponentRenameEvent.cs
- OleDbParameter.cs
- AuditLevel.cs
- InputLangChangeRequestEvent.cs
- NullableDecimalMinMaxAggregationOperator.cs
- ConnectionOrientedTransportChannelListener.cs
- QilInvokeLateBound.cs
- ReadOnlyCollectionBase.cs
- UnicastIPAddressInformationCollection.cs
- TextParaClient.cs
- EntityDataReader.cs
- WindowsListViewGroup.cs
- FromReply.cs
- CapabilitiesState.cs
- TextLineBreak.cs
- ObjectKeyFrameCollection.cs
- CapabilitiesAssignment.cs
- ExecutionContext.cs
- SectionInformation.cs
- WSHttpBindingCollectionElement.cs
- TypeSource.cs
- _NestedMultipleAsyncResult.cs
- Scripts.cs
- RegexTree.cs
- FusionWrap.cs
- GeometryCollection.cs
- NativeObjectSecurity.cs
- WorkflowStateRollbackService.cs
- FlowDocumentScrollViewer.cs
- FontDriver.cs
- GradientStop.cs
- UntypedNullExpression.cs
- HostExecutionContextManager.cs
- Ref.cs
- TextChangedEventArgs.cs
- ViewGenResults.cs
- DynamicILGenerator.cs
- RowType.cs
- WebPartTransformer.cs
- MappingException.cs
- TextRunCache.cs
- FormatVersion.cs
- CollectionViewGroupRoot.cs
- BasicBrowserDialog.cs
- DesignerView.xaml.cs
- ErrorRuntimeConfig.cs
- XPathDocumentIterator.cs
- InternalEnumValidatorAttribute.cs
- Int32CollectionValueSerializer.cs
- XmlSiteMapProvider.cs
- IndexerReference.cs
- PackagePartCollection.cs
- BitmapEffectGeneralTransform.cs
- TraceXPathNavigator.cs
- CancellationHandlerDesigner.cs
- BaseValidatorDesigner.cs
- InfoCardBaseException.cs
- smtpconnection.cs
- NonBatchDirectoryCompiler.cs
- BitmapEffectDrawing.cs
- LinkedList.cs
- BooleanStorage.cs
- WindowsButton.cs
- SqlEnums.cs
- SplineKeyFrames.cs
- ZipIOExtraFieldPaddingElement.cs
- VirtualPathProvider.cs
- TrackingParameters.cs