Пример #1
0
        /// <summary>
        /// 暗号化ハッシュ取得
        /// </summary>
        /// <param name="assetBundleNameWithVariant">バリアント付きアセットバンドル名</param>
        /// <returns>暗号化ハッシュ</returns>
        public int GetCryptoHash(string assetBundleNameWithVariant)
        {
            var result = 0;

            if (IsCrypto(assetBundleNameWithVariant))
            {
                result = AssetBundleCrypto.GetFirstCryptoHash();
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// 暗号化
        /// </summary>
        /// <param name="source">元ファイル</param>
        /// <param name="dest">暗号化ファイル(元ファイルと同一は不可)</param>
        /// <param name="cryptoHash">暗号化ハッシュ</param>
        /// <param name="isNonDeterministic">非決定性暗号化</param>
        /// <remarks>非スレッドセーフ</remarks>
        public void Encrypt(string source, string dest, int cryptoHash, bool isNonDeterministic)
        {
            var sourceFullPath = Application.dataPath + "/../" + source;
            var destFullPath   = Application.dataPath + "/../" + dest;

            byte[] iv;
            if (isNonDeterministic)
            {
                //非決定性暗号化
                iv = CreateRandomIV();
            }
            else
            {
                //決定性暗号化
                iv = hashAlgorithm.GetHashFromFile(sourceFullPath).Take(AssetBundleCrypto.kIVSize).ToArray();
            }

            using (var destStream = File.Open(destFullPath, FileMode.Create, FileAccess.Write)) {
                destStream.Write(iv, 0, iv.Length);
                using (var sourceStream = File.Open(sourceFullPath, FileMode.Open, FileAccess.Read)) {
                    var fileSizeBytes = System.BitConverter.GetBytes((int)sourceStream.Length);
                    destStream.Write(fileSizeBytes, 0, fileSizeBytes.Length);

                    var buffer = cryptoBuffer;
                    var key    = AssetBundleCrypto.GetCryptoKey(cryptoHash);
                    using (var encryptStream = AssetBundleCrypto.GetEncryptStream(destStream, key, iv)) {
                        while (true)
                        {
                            var readed = sourceStream.Read(buffer, 0, buffer.Length);
                            if (0 == readed)
                            {
                                break;
                            }
                            encryptStream.Write(buffer, 0, readed);
                        }
                    }
                }
            }
        }