MyUtil/EncryptUtil.cs

(开头部分) 13KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

using java.security;
using javax.crypto;
using javax.crypto.spec;

namespace DigitalCredentialsCabinet.MyUtil
{
    class EncryptUtil
    { 
        private static Random random = new Random();
        private static Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
        private static Provider BC_PROVIDER = new org.bouncycastle.jce.provider.BouncyCastleProvider();
        private static Mac mac = Mac.getInstance("ISO9797Alg3Mac", BC_PROVIDER);

        private EncryptUtil() { }
        
        /// <summary>
        /// 外部直接调用的方法,可生成最终命令
        /// </summary>
        /// <param name="number"></param>
        /// <param name="dateOfBirth"></param>
        /// <param name="dateOfExpiry"></param>
        /// <param name="rndICC"></param>
        /// <returns></returns>
        public static byte[] doBAC(string number, string dateOfBirth, string dateOfExpiry, byte[] rndICC)
        {
            bool b = (dateOfBirth.Length != 6) || (dateOfExpiry.Length != 6) || (number.Length != 9) || (rndICC.Length != 8);
            if ((dateOfBirth.Length != 6) || (dateOfExpiry.Length != 6) || (number.Length != 9) || (rndICC.Length != 8))
            {
                throw new Exception("生成keySeed参数有误!numberLength(9):"+ number.Length + "birthday(6):"+ dateOfBirth.Length + "dateOfExpory(6):"+ dateOfExpiry.Length);
            }

            byte[] keySeed = computekeyseed(number, dateOfBirth, dateOfExpiry, true);
            SecretKey kEnc = deriveKey(keySeed, 1);
            SecretKey kMac = deriveKey(keySeed, 2);//生成密钥
            byte[] capdu = GetApduCmd(kEnc, kMac, rndICC);
            
            /// 生成完整命令(报头+命令+数据) - Start
            byte[] cmdFinal = new byte[56];
            cmdFinal[0] = 0;
            cmdFinal[1] = 0;
            cmdFinal[2] = 255;//Convert.ToByte("FF", 16);
            cmdFinal[3] = 49;
            cmdFinal[4] = 207;//Convert.ToByte("CF", 16);
            cmdFinal[5] = 212;//Convert.ToByte("D4", 16);
            cmdFinal[6] = 64;// Convert.ToByte("40", 16);
            cmdFinal[7] = 1;
            Array.Copy(capdu, 0, cmdFinal, 8, 46);
            cmdFinal[55] = 0;
            /// 生成完整命令(报头+命令+数据) - End
            int sum = 0;
            for (int i = 5; i < 54; i++)
            {
                sum += cmdFinal[i];
            }
后面还有 258 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。