예제 #1
0
        private void encryptTitleKey()
        {
            commonKeyIndex = newKeyIndex;
            byte[] ckey = (commonKeyIndex == 0x01) ? CommonKey.GetKoreanKey() : CommonKey.GetStandardKey();
            byte[] iv   = BitConverter.GetBytes(Shared.Swap(titleId));
            Array.Resize(ref iv, 16);

            RijndaelManaged rm = new RijndaelManaged();

            rm.Mode      = CipherMode.CBC;
            rm.Padding   = PaddingMode.None;
            rm.KeySize   = 128;
            rm.BlockSize = 128;
            rm.Key       = ckey;
            rm.IV        = iv;

            ICryptoTransform encryptor = rm.CreateEncryptor();

            MemoryStream ms = new MemoryStream(decryptedTitleKey);
            CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Read);

            cs.Read(encryptedTitleKey, 0, encryptedTitleKey.Length);

            cs.Dispose();
            ms.Dispose();
            encryptor.Dispose();
            rm.Clear();
        }
예제 #2
0
        private void decryptTitleKey()
        {
            byte[] ckey;
            switch (commonKeyIndex)
            {
            default:
                ckey = CommonKey.GetStandardKey();
                break;

            case 0x01:
                ckey = CommonKey.GetKoreanKey();
                break;

            case 0x02:
                ckey = CommonKey.GetvWiiKey();
                break;
            }
            byte[] iv = BitConverter.GetBytes(Shared.Swap(titleId));
            Array.Resize(ref iv, 16);

            RijndaelManaged rm = new RijndaelManaged();

            rm.Mode      = CipherMode.CBC;
            rm.Padding   = PaddingMode.None;
            rm.KeySize   = 128;
            rm.BlockSize = 128;
            rm.Key       = ckey;
            rm.IV        = iv;

            ICryptoTransform decryptor = rm.CreateDecryptor();

            MemoryStream ms = new MemoryStream(encryptedTitleKey);
            CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);

            cs.Read(decryptedTitleKey, 0, decryptedTitleKey.Length);

            cs.Dispose();
            ms.Dispose();
            decryptor.Dispose();
            rm.Clear();
        }