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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。