why CRC and HASH difference between building multiple identical objects and building one?

For example,
I build to assetbundle in layout_001 prefab
just one build, result it is

name : layout_001
ManifestFileVersion: 0
CRC: 958480801
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 9402eb6541300ad5b529bc86bb8b6706
TypeTreeHash:
serializedVersion: 2
Hash: d7788c82f5d97aef4db5a0de96a76631
HashAppended: 0

this one build is fine, No problem unless i change the object
but if i build more than one, changed crc and hash

name : layout_001
ManifestFileVersion: 0
CRC: 752618874
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: aecdaf55c509bb07b1f94560bb1ed053
TypeTreeHash:
serializedVersion: 2
Hash: d7788c82f5d97aef4db5a0de96a76631
HashAppended: 0
name : layout_002

what i’m trying to do is,
I change the name of the assetbundle using hash and crc and try to download the assetbundle according to the program version. but i’m confused about how crc and hash change depending on the number of builds …

I try this code

List<AssetBundleBuild> maps = GetMaps();
for (int i = 0; i < maps.Count; ++i)
{
    BuildPipeline.BuildAssetBundles(
    outputPath,
    new AssetBundleBuild[] { maps[i].map },
    BuildAssetBundleOptions.ForceRebuildAssetBundle |
    BuildAssetBundleOptions.AssetBundleStripUnityVersion |
    BuildAssetBundleOptions.DisableLoadAssetByFileName |
    BuildAssetBundleOptions.DisableLoadAssetByFileNameWithExtension,
    buildTarget);
}

CRC and Hash should change on each time you make asset build, and sometimes they stay the same which is a problem

The reason why they should change each time, bec when you download it, they are cached and unity store each bundle hash in the DB browser , so whenever you call it next time, unity check if it should pull the cached version or redownload the updated one