📄 jsoftlib.java
字号:
throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
} else
{
iv = cbcParam.getIV();
ivKey = new ParametersWithIV(key, iv);
return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
}
case 306:
return Crypto.cipherEncode(8, isEncryption, key, source_data);
case 307:
cbcParam = (CBCParam)mechanism.getParam();
if(cbcParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
} else
{
iv = cbcParam.getIV();
ivKey = new ParametersWithIV(key, iv);
return Crypto.cipherEncode(9, isEncryption, ivKey, source_data);
}
case 849:
return Crypto.cipherEncode(22, isEncryption, key, source_data);
case 850:
cbcParam = (CBCParam)mechanism.getParam();
if(cbcParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
} else
{
iv = cbcParam.getIV();
ivKey = new ParametersWithIV(key, iv);
return Crypto.cipherEncode(23, isEncryption, ivKey, source_data);
}
case 801:
return Crypto.cipherEncode(28, isEncryption, key, source_data);
case 802:
cbcParam = (CBCParam)mechanism.getParam();
if(cbcParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
} else
{
iv = cbcParam.getIV();
ivKey = new ParametersWithIV(key, iv);
return Crypto.cipherEncode(29, isEncryption, ivKey, source_data);
}
case 833:
return Crypto.cipherEncode(30, isEncryption, key, source_data);
case 834:
cbcParam = (CBCParam)mechanism.getParam();
if(cbcParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
} else
{
iv = cbcParam.getIV();
ivKey = new ParametersWithIV(key, iv);
return Crypto.cipherEncode(31, isEncryption, key, source_data);
}
case 1: // '\001'
return Crypto.RSAEncode(12, isEncryption, key, source_data);
case -2147483632:
pbeEng = 16;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
}
case -2147483631:
pbeEng = 15;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
}
case -2147483630:
pbeEng = 17;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
}
case -2147483629:
pbeEng = 16;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
}
case -2147483628:
pbeEng = 15;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
}
case -2147483627:
pbeEng = 17;
pbeParam = (PBEParam)mechanism.getParam();
if(pbeParam == null)
{
throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
} else
{
iterations = pbeParam.getIterations();
salt = pbeParam.getSalt();
password = ((KeyParameter)key).getKey();
ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
}
case 1026:
if(isEncryption)
return eccEncrypt(key, source_data);
else
return eccDecrypt(key, source_data);
}
throw new Exception(String.valueOf(String.valueOf((new StringBuffer("JSoftLib: not support MechanismType:")).append(mType).append(" in Encryption/Decryption mod."))));
}
private boolean isEqualArray(byte a[], byte b[])
{
if(a.length != b.length)
return false;
for(int i = 0; i < a.length; i++)
if(a[i] != b[i])
return false;
return true;
}
private AsymmetricCipherKeyPair generateECCKeyPair(int curveID)
throws Exception
{
X9ECParameters x9Param = null;
switch(curveID)
{
case 10001:
x9Param = X962NamedCurves.getByName("prime160v1");
break;
case 20001:
x9Param = X962NamedCurves.getByName("prime192v1");
break;
case 20003:
x9Param = X962NamedCurves.getByName("prime192v3");
break;
case 30001:
x9Param = X962NamedCurves.getByName("prime239v1");
break;
case 30002:
x9Param = X962NamedCurves.getByName("prime239v2");
break;
case 30003:
x9Param = X962NamedCurves.getByName("prime239v3");
break;
case 40001:
x9Param = X962NamedCurves.getByName("prime256v1");
break;
default:
throw new Exception("not support ECC curve id:".concat(String.valueOf(String.valueOf(curveID))));
}
ECDomainParameters params = new ECDomainParameters(x9Param.getCurve(), x9Param.getG(), x9Param.getN());
ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params, new SecureRandom());
ECKeyPairGenerator pGen = new ECKeyPairGenerator();
pGen.init(genParam);
return pGen.generateKeyPair();
}
private byte[] eccEncrypt(CipherParameters pubKey, byte sourceData[])
throws Exception
{
ECPublicKeyParameters ecKey = (ECPublicKeyParameters)pubKey;
ECDomainParameters ecdp = ecKey.getParameters();
ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(ecdp, new SecureRandom());
ECKeyPairGenerator pGen = new ECKeyPairGenerator();
pGen.init(genParam);
AsymmetricCipherKeyPair keyPair = pGen.generateKeyPair();
IESEngine eng = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA1Digest()), new HMac(new SHA1Digest()));
IESParameters p = new IESParameters(null, null, 160);
eng.init(true, keyPair.getPrivate(), pubKey, p);
byte out[] = eng.processBlock(sourceData, 0, sourceData.length);
X9ECIESStructure x9stru = new X9ECIESStructure();
x9stru.setQ(((ECPublicKeyParameters)keyPair.getPublic()).getQ());
x9stru.setEncodedMessageAndMac(out);
return x9stru.getOutputData();
}
private byte[] eccDecrypt(CipherParameters prvKey, byte data[])
throws Exception
{
ECPrivateKeyParameters prk = (ECPrivateKeyParameters)prvKey;
IESEngine eng = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA1Digest()), new HMac(new SHA1Digest()));
IESParameters p = new IESParameters(null, null, 160);
ECDomainParameters ecdp = ((ECKeyParameters)prvKey).getParameters();
BigInteger tb = ecdp.getG().getX().toBigInteger();
int keyLen = ((tb.bitLength() + 7) / 8) * 8;
X9ECIESStructure x9stru = new X9ECIESStructure(data, keyLen, 20);
byte Q[] = x9stru.getQ();
byte encryptedData[] = x9stru.getEncodedMessageAndMac();
ECPublicKeyParameters servPubKey = new ECPublicKeyParameters(ecdp.getCurve().decodePoint(Q), ecdp);
eng.init(false, prvKey, servPubKey, p);
byte out[] = eng.processBlock(encryptedData, 0, encryptedData.length);
return out;
}
public byte[] sign_ex(Mechanism mechanism, JKey key, byte sourceData[])
throws Exception
{
int mType = mechanism.getMechanismType();
Mechanism digestM = null;
switch(mType)
{
case 4: // '\004'
digestM = new JMechanism(512);
break;
case 5: // '\005'
digestM = new JMechanism(528);
break;
case 6: // '\006'
digestM = new JMechanism(544);
break;
case 1027:
byte sig[] = sign(mechanism, key, sourceData);
return Crypto.encodeECDSASignature(sig);
default:
throw new Exception(String.valueOf(String.valueOf((new StringBuffer("JSoftLib(sign_ex):not support MechanismType ")).append(mType).append(" in sign mod."))));
}
byte digestInfo[] = generateDigestInfo(digestM, sourceData);
Mechanism cryptoM = new JMechanism(1);
byte sig[] = encrypt(cryptoM, key, digestInfo);
return sig;
}
public boolean verifySign_ex(Mechanism mechanism, JKey key, byte sourceData[], byte signData[])
{
boolean flag1;
try
{
if(key.getKeyType() == 1)
{
Mechanism cryptoM = new JMechanism(1);
byte digestInfo[] = decrypt(cryptoM, key, signData);
ASN1Sequence seq = (ASN1Sequence)Parser.writeBytes2DERObj(digestInfo);
AlgorithmIdentifier alg = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
DERObjectIdentifier oid = alg.getObjectId();
Mechanism digestM = null;
if(oid.equals(PKCSObjectIdentifiers.md2))
digestM = new JMechanism(512);
else
if(oid.equals(PKCSObjectIdentifiers.md5))
digestM = new JMechanism(528);
else
if(oid.equals(PKCSObjectIdentifiers.sha1))
{
digestM = new JMechanism(544);
} else
{
boolean flag3 = false;
return flag3;
}
byte myDigestInfo[] = generateDigestInfo(digestM, sourceData);
boolean flag4 = isEqualArray(digestInfo, myDigestInfo);
return flag4;
}
if(key.getKeyType() == 1001)
{
byte sig[] = Crypto.decodeECCSignature(signData);
Mechanism signM = new JMechanism(1027);
boolean flag2 = verifySign(signM, key, sourceData, sig);
return flag2;
} else
{
boolean flag = false;
return flag;
}
}
catch(Exception ex)
{
flag1 = false;
}
return flag1;
}
private byte[] generateDigestInfo(Mechanism digestM, byte data[])
throws Exception
{
int mType = digestM.getMechanismType();
AlgorithmIdentifier algId = null;
if(mType == 512)
algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.md2, null);
else
if(mType == 528)
algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.md5, null);
else
if(mType == 544)
algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.sha1, null);
else
throw new Exception("JSoftLib(generateDigestInfo): Not Support MessageDigest Algorithm:".concat(String.valueOf(String.valueOf(digestM.getMechanismType()))));
byte hashcode[] = digest(digestM, data);
DEREncodableVector derV = new DEREncodableVector();
DEROctetString derO = new DEROctetString(hashcode);
derV.add(algId);
derV.add(derO);
DERSequence derS = new DERSequence(derV);
return Parser.writeDERObj2Bytes(derS);
}
public boolean isSupport(int mechanismType)
{
for(int i = 0; i < SUPPORT_TYPE_LIST.length; i++)
if(mechanismType == SUPPORT_TYPE_LIST[i])
return true;
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -