日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

工具庫

MYTF SDK 中包含密碼工具庫,可以幫助用戶進(jìn)行密鑰轉(zhuǎn)換、加密、簽名等操作。

UserKeyFactory & CryptoUtils

用于生成公私鑰對,并對公私鑰進(jìn)行格式轉(zhuǎn)換。

  1. // 動態(tài)引入BC
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 本地生成密鑰對 SECP256K1 曲線 EC 密鑰
  4. UserKeyPair userKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECDSA_RAW_SECP256K1_KEY);
  5. // 本地生成密鑰對 SM2P256V1 曲線 EC 密鑰
  6. UserKeyPair SMUserKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECDSA_SM2P256V1_KEY);
  7. // 本地生成密鑰對 RSA 密鑰
  8. UserKeyPair rsaUserKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.RSA_2048_KEY);
  9. // 獲取公私鑰
  10. PublicKey PKCS8Pubkey = userKeyPair.getPublicKey();
  11. PrivateKey PKCS8Prikey = userKeyPair.getPrivateKey();
  12. // 獲取 PKCS8 格式公私鑰
  13. byte[] PKCS8PubkeyBytes = userKeyPair.getPublicKey().getEncoded();
  14. byte[] PKCS8PrikeyBytes = userKeyPair.getPrivateKey().getEncoded();
  15. // 獲取裸格式公私鑰
  16. byte[] pubkeyBytes = userKeyPair..getRawPrivateKey();
  17. byte[] prikeyBytes = userKeyPair.userKeyPair.getRawPublicKey();
  18. // 從 PKCS8 格式轉(zhuǎn)成私鑰
  19. PrivateKey privateKey = CryptoUtils.getECPriKeyFromPKCS8Bytes(PKCS8Prikey.getEncoded());
  20. // 從裸格式轉(zhuǎn)成私鑰
  21. PrivateKey privateKey2 = CryptoUtils.getECPriKeyFromBytes(userKeyPair.getRawPrivateKey(),CryptoSuiteTypeEnum.SECP256K1);
  22. // 從 PKCS8 格式轉(zhuǎn)成公鑰
  23. PublicKey publicKey = CryptoUtils.getECPubKeyFromPKCS8Bytes(PKCS8Pubkey.getEncoded());
  24. // 從裸格式轉(zhuǎn)成公鑰
  25. PublicKey publicKey2 = CryptoUtils.getECPubkeyFromBytes(userKeyPair.getRawPublicKey(), CryptoSuiteTypeEnum.SECP256K1);
  26. // 本地生成密鑰對并用密碼加密
  27. String password = "1235678";
  28. KeyDto keyDto = UserKeyFactory.generateKey(password);
  29. // PKCS8 格式私鑰
  30. String sk = keyDto.getPrivateKey();
  31. // 裸格式公鑰
  32. String pk = keyDto.getPublicKey();
  33. // 加密的 PEM 格式轉(zhuǎn)換獲取私鑰
  34. PrivateKey userSK = CryptoUtils.getECPriKeyFromPEM(sk, password);
  35. // Hex 的裸格式轉(zhuǎn)換獲取公鑰
  36. PublicKey userPK = CryptoUtils.getECPubkeyFromBytes(Hex.decode(pk), CryptoSuiteTypeEnum.SECP256K1);

ECDSATool

幫助用戶本地進(jìn)行 ECDSA 簽名和驗(yàn)簽。

  1. // 在使用之前動態(tài)加入 BouncyCastle Provider
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 本地生成 SECP256K1 公私鑰
  4. UserKeyPair userKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECDSA_RAW_SECP256K1_KEY);
  5. // 獲取 PKCS8 格式公私鑰
  6. byte[] PKCS8PrikeyBytes = userKeyPair.getPrivateKey().getEncoded();
  7. byte[] PKCS8PubkeyBytes = userKeyPair.getPublicKey().getEncoded();
  8. // 對 msg 進(jìn)行簽名和驗(yàn)簽,需要傳入 PKCS8 格式公私鑰
  9. byte[] msg = "this is test for ecdsa".getBytes();
  10. byte[] signature = ECDSATool.ECDSASign(msg , PKCS8PrikeyBytes);
  11. Assert.assertTrue(ECDSATool.ECDSAVerify(msg ,PKCS8PubkeyBytes, signature));
  12. // 對 msg 進(jìn)行簽名和驗(yàn)簽,需要先對內(nèi)容進(jìn)行哈希,并傳入裸格式公私鑰
  13. byte[] sha256msg = Hash.sha256(msg);
  14. byte[] signature2 = ECDSATool.sign(sha256msg , userKeyPair.getRawPrivateKey());
  15. Assert.assertTrue(ECDSATool.verify(sha256msg , userKeyPair.getRawPublicKey(), signature2));

ECIESTool

幫助用戶本地進(jìn)行 ECIES 加密和解密。

  1. // 在使用之前動態(tài)加入BouncyCastle Provider
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 本地模擬生成 tapp 的公私鑰和用戶的公私鑰
  4. UserKeyPair userKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECIES_SECP256K1_KEY);
  5. UserKeyPair tappKeyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECIES_SECP256K1_KEY);
  6. // 獲取 PKCS8 格式公私鑰
  7. byte[] userPrikeyBytes = userKeyPair.getPrivateKey().getEncoded();
  8. byte[] userPubkeyBytes = userKeyPair.getPublicKey().getEncoded();
  9. // 獲取 PKCS8 格式公私鑰
  10. byte[] tappPrikeyBytes = userKeyPair.getPrivateKey().getEncoded();
  11. byte[] tappPubkeyBytes = userKeyPair.getPublicKey().getEncoded();
  12. String plainText = "this is test for ecies";
  13. byte[] ciphertext = ECIESTool.ECIESEncrypt(tappPubkeyBytes, userPrikeyBytes, plainText.getBytes());
  14. byte[] decrypted = ECIESTool.ECIESDecrypt(userPubkeyBytes, tappPrikeyBytes, ciphertext);

ECElgamalTool

幫助用戶在本地進(jìn)行 ECElamal 加密解密。

  1. // 在使用之前動態(tài)加入 BouncyCastle Provider
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 模擬三方分別生成公私鑰對
  4. UserKeyPair user1Keypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECELGAMAL_SECP256K1_KEY);
  5. UserKeyPair user2Keypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECELGAMAL_SECP256K1_KEY);
  6. UserKeyPair user3Keypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECELGAMAL_SECP256K1_KEY);
  7. // 分別獲取三方的公鑰
  8. String[] publicKeys = new String[3];
  9. publicKeys[0] = Base64.toBase64String(user1Keypair.getRawPublicKey());
  10. publicKeys[1] = Base64.toBase64String(user2Keypair.getRawPublicKey());
  11. publicKeys[2] = Base64.toBase64String(user3Keypair.getRawPublicKey());
  12. // 用三把公鑰對內(nèi)容進(jìn)行加密
  13. String plainText = "this is test for ecelgamal";
  14. byte[] ciphertext = ECElgamalTool.ECElgamalEncrypt(CryptoSuiteTypeEnum.SECP256K1, publicKeys, plainText.getBytes());
  15. // 解密方用自己的裸私鑰進(jìn)行解密
  16. byte[] user3PrikeyBytes = user3Keypair.getRawPrivateKey();
  17. byte[] decrypted = ECElgamalTool.ECElgamalDecrypt(CryptoSuiteTypeEnum.SECP256K1, user3PrikeyBytes, ciphertext);

RSATool

幫助用戶在本地進(jìn)行 RSA 簽名驗(yàn)簽。

  1. // 本地生成RSA公私鑰
  2. UserKeyPair rsaKeypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.RSA_2048_KEY);
  3. String plain = "this is test for RSASign";
  4. // 獲取PKCS8格式公私鑰
  5. byte[] userPrikeyBytes = rsaKeypair.getPrivateKey().getEncoded();
  6. byte[] userPubkeyBytes = userKeyPair.getPublicKey().getEncoded();
  7. byte[] sig = RSATool.RSASign(plain.getBytes(), userPrikeyBytes);
  8. Assert.assertTrue(RSATool.RSAVerify(plain.getBytes(), sig, userPubkeyBytes));

SM2Tool

幫助用戶進(jìn)行國密算法簽名驗(yàn)簽和加密解密。

  1. // 在使用之前動態(tài)加入 BouncyCastle Provider
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 本地生成SM2P256V1公私鑰
  4. UserKeyPair signKeypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECDSA_SM2P256V1_KEY);
  5. UserKeyPair enckeypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.SM4GCM_SM2P256V1_KEY);
  6. // 獲取裸格式公私鑰
  7. byte[] userSignPrikeyBytes = signKeypair.getRawPrivateKey();
  8. byte[] userSignPubkeyBytes = signKeypair.getRawPublicKey();
  9. // 獲取裸格式公私鑰
  10. byte[] userEncPrikeyBytes = signKeypair.getRawPrivateKey();
  11. byte[] userEncPubkeyBytes = signKeypair.getRawPublicKey();
  12. // 用 SM2P256V1 公私鑰進(jìn)行簽名和驗(yàn)簽
  13. String plainText = "this is test for sm2";
  14. byte[] signature = SM2Tool.SM2Sign(userSignPrikeyBytes, plainText);
  15. Assert.assertTrue(SM2Tool.SM2Verify(userSignPubkeyBytes, plainText, signature));
  16. // 用 SM2P256V1 公私鑰進(jìn)行加密和解密
  17. byte[] cipherText = SM2Tool.SM4GCMSM2Encrypt(userEncPubkeyBytes, plainText);
  18. byte[] plainText2 = SM2Tool.SM4GCMSM2Decrypt(userEncPrikeyBytes, cipherText);
  19. Assert.assertTrue(Arrays.equals(plainText, plainText2));

EnvelopeUtils

幫助用戶構(gòu)造和打開 TAPP 信封。

  1. // 在使用之前動態(tài)加入BouncyCastle Provider
  2. Security.addProvider(new BouncyCastleProvider());
  3. // 本地模擬生成用戶和 TAPP 的 SECP256K1 公私鑰
  4. UserKeyPair userKeypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECIES_SECP256K1_KEY);
  5. UserKeyPair tappKeypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.ECIES_SECP256K1_KEY);
  6. // 獲取用戶 PKCS8 格式公私鑰
  7. byte[] userPrikeyBytes = userKeypair.getPrivateKey().getEncoded();
  8. byte[] userPubkeyBytes = userKeypair.getPublicKey().getEncoded();
  9. // 獲取 TAPP PKCS8 格式公私鑰
  10. byte[] tappPrikeyBytes = tappKeypair.getPrivateKey().getEncoded();
  11. byte[] tappPubkeyBytes = tappKeypair.getPublicKey().getEncoded();
  12. // 用戶對內(nèi)容打包成加密信封
  13. String plainText = "this is test for envelope";
  14. byte[] tappEnvelope = EnvelopeUtils.buildTappEnvelope(tappPubkeyBytes, userPrikeyBytes, plainText.getBytes());
  15. // TAPP 對用戶加密信封解密
  16. byte[] envelopeRecoverPlainData = EnvelopeUtils.openTappEnvelope(userPubkeyBytes, tappPrikeyBytes, tappEnvelope);
  17. // 本地模擬生成用戶和 TAPP 的 SM2P256V1 公私鑰
  18. UserKeyPair userSM2keyPair = UserKeyFactory.generateKeyPair(KeyTypeEnum.SM4GCM_SM2P256V1_KEY);
  19. UserKeyPair tappSM2Keypair = UserKeyFactory.generateKeyPair(KeyTypeEnum.SM4GCM_SM2P256V1_KEY);
  20. // 獲取用戶裸格式公私鑰
  21. byte[] userSMPrikeyBytes = userSM2keyPair.getRawPrivateKey();
  22. byte[] userSMPubkeyBytes = userSM2keyPair.getRawPublicKey();
  23. // 獲取 TAPP 裸格式公私鑰
  24. byte[] tappSMPrikeyBytes = tappSM2Keypair.getRawPrivateKey();
  25. byte[] tappSMPubkeyBytes = tappSM2Keypair.getRawPublicKey();
  26. // 用戶對內(nèi)容使用國密算法打包成加密信封
  27. byte[] tappSMEnvelope = EnvelopeUtils.buildSMTappEnvelope(tappSMPubkeyBytes, userSMPrikeyBytes, plainText);
  28. // TAPP 對用戶加密信封解密
  29. byte[] recoveredPlain = EnvelopeUtils.openSMTappEnvelope(tappSMPrikeyBytes, userSMPubkeyBytes, tappSMEnvelope);