# **eos-crypto-java 使用指南**
eos-crypto-java 目前可以支持 基于 ECC+AES 的加解密方式。
在本压缩包中,包含基于jdk1.5 打好的jar 包。
## 要求
jdk 1.5+
## 基于 EOS 公钥加密,私钥解密示例
```java
String privateKey = "5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk";
EosPrivateKey eosPrivateKey = new EosPrivateKey(privateKey);
EosPublicKey eosPublicKey = eosPrivateKey.getPublicKey();
// 转换成 EC privatekey
ECPrivateKey ecPrivateKey = eosPrivateKey.getECPrivateKey();
ECPublicKey ecPublicKey = eosPublicKey.getECPublicKey();
byte[] plaindata = "{\"age\": 1,\"12345\":\"24qqwazzxdtttdxkaskjewuizckczxnlsdosasda4!!!@#$$%^&&*(()(^#\"}".getBytes("utf8");
System.out.println("加密原文:" + new String(plaindata));
byte[] encryptdata = ECCUtil.publicEncrypt(plaindata,ecPublicKey);
System.out.println("加密后密文:" + HexUtils.toHex(encryptdata));
plaindata = ECCUtil.privateDecrypt(encryptdata,ecPrivateKey);
System.out.println("解密后原文: "+ new String(plaindata));
```
## 基于ECC+AES 双向验证 加解密示例
```java
/**
*
* sender 发起方密钥对
*
* EOS8g1u3ktAGHs4QsVp9aeaWNebFLtprQHwpaSjegx6iEuoTNhjXU
* 5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk
*
* receiver 接收方一密钥对
*
* EOS7ez2gagfoXw9XdW3kRx3EsCoWvupGR6u6ZJhFPEe9Q12V8JgUL
* 5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9
*
* receiver 接收方二 密钥对
* EOS5WMHqw6jDDBPBm7JXTHemAwtSo2tp93pRysJMRhiT1zUYb24vL
* 5HrcVeuHHNwHsivrMoJ9XvU6EM7Q2wQ2ECiy8GeoiuamhNiSuZq
*/
// 1. 调用钱包获取 发送方私钥
String senderPrivateKey = "5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk";
EosPrivateKey senderECPrivateKey = new EosPrivateKey(senderPrivateKey);
// EosPublicKey senderECPublicKey = new EosPublicKey(senderPublicKey);
// 2. 根据私钥 生成公钥。 或者直接根据公钥 调用钱包获取私钥。 都可以。
EosPublicKey senderECPublicKey = senderECPrivateKey.getPublicKey();
String senderPublicKey = senderECPublicKey.toString();
/**
* 调用钱包获取 接收方私钥 获取公私钥方式 根据需求确定。
* 1. 可以根据公钥,从钱包里获取私钥
* 2. 也可以直接从钱包里取出私钥,反向生成公钥
*
* 实际业务场景,发起方只会有接收方公钥,并没有接收方私钥.
* 此时 可以通过 new EosPublicKey(receiverPublicKey) 方式 生成EosPublicKey 对象。
*/
String receiverPrivateKey = "5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9";
EosPrivateKey receiverECPrivateKey = new EosPrivateKey(receiverPrivateKey);
EosPublicKey receiverECPublicKey = receiverECPrivateKey.getPublicKey();
String receiverPublicKey = receiverECPublicKey.toString();
// String receiverPublicKey = "EOS7ez2gagfoXw9XdW3kRx3EsCoWvupGR6u6ZJhFPEe9Q12V8JgUL";
/**
* 使用 发送者方私钥 和接收方公钥,生成 aes key, 对数据进行加密
* nonce 为初始化向量,可以使用固定值,
* 也可以使用随机值,并使用私有协议。根据业务需求选择。
*/
byte[] nonce = new byte[16];
MTRandom random=new MTRandom();
random.nextBytes(nonce);
// 待加密 数据
byte[] params = "{\"test1\": 1,\"test2\":\"24qqwazzxdtttdxkaskjewuizckczxnlsdosasda4!!!@#$$%^&&*((){}(^#\"}".getBytes("utf8");
System.out.println("原始加密数据: " + new String(params,"utf8"));
byte[] encrypted = new byte[0];
try {
encrypted = CryptUtil.encrypt(senderECPrivateKey,receiverECPublicKey,nonce,params);
} catch (InvalidCipherTextException e) {
e.printStackTrace();
System.out.println(" do something!!!!");
}
System.out.println("加密后数据: " + new String(encrypted,"utf8"));
try {
byte[] plainText = CryptUtil.decrypt(receiverECPrivateKey,senderECPublicKey,nonce,encrypted);
// 解密后数据
System.out.println("解密后数据 : "+new String(plainText, "utf8"));
} catch (InvalidCipherTextException e) {
e.printStackTrace();
System.out.println(" do something!!!!");
}
```
## 基于数字信封的 加解密示例
```java
/**
*
* sender
*
* EOS8g1u3ktAGHs4QsVp9aeaWNebFLtprQHwpaSjegx6iEuoTNhjXU
* 5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk
*
* receiver 平台公私钥对
*
* EOS7ez2gagfoXw9XdW3kRx3EsCoWvupGR6u6ZJhFPEe9Q12V8JgUL
* 5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9
*
* receiver 省侧公私钥对
* EOS5WMHqw6jDDBPBm7JXTHemAwtSo2tp93pRysJMRhiT1zUYb24vL
* 5HrcVeuHHNwHsivrMoJ9XvU6EM7Q2wQ2ECiy8GeoiuamhNiSuZq
*/
// 1. 调用钱包获取 发送方私钥
String senderPrivateKey = "5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk";
EosPrivateKey senderECPrivateKey = new EosPrivateKey(senderPrivateKey);
// EosPublicKey senderECPublicKey = new EosPublicKey(senderPublicKey);
// 2. 根据私钥 生成公钥。 或者直接根据公钥 调用钱包获取私钥。 都可以,看具体业务需求
EosPublicKey senderECPublicKey = senderECPrivateKey.getPublicKey();
String senderPublicKey = senderECPublicKey.toString();
/**
* 调用钱包获取 接收方私钥 获取公私钥方式 根据业务需求确定。
* 1. 可以根据公钥,从钱包里获取私钥
* 2. 也可以直接从钱包里取出私钥,反向生成公钥
*/
String receiverPrivateKey = "5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9";
EosPrivateKey receiverECPrivateKey = new EosPrivateKey(receiverPrivateKey);
EosPublicKey receiverECPublicKey = receiverECPrivateKey.getPublicKey();
/**
* 生成对称密钥
*/
byte[] nonce = new byte[16];
MTRandom random=new MTRandom();
random.nextBytes(nonce);
// 待加密 数据
byte[] params = "{\"age\": 1,\"汉字\":\"为初始化向量,可以使用固定值,\",\"12345\":\"24qqwazzxdtttdxkaskjewuizckczxnlsdosasda4!!!@#$$%^&&*(()(^#\"}".getBytes("utf8");
System.out.println("加密前原始数据: " + new String(params,"utf8"));
// 发起方使用对称密钥,对原始数据进行加密
byte[] encryptedData = null;
try {
encryptedData = CryptUtil.aesEncryptWithNOIV(nonce,params);
} catch (InvalidCipherTextException e) {
e.printStackTrace();
System.out.println(" do something!!!!");
}
System.out.println("加密后数据: " + HexUtils.toHex(encryptedData));
System.out.println("加密前对称密钥: " + HexUtils.toHex(nonce));
// 发起方使用 接收方公钥,对对称密钥进行加密
byte[] encryptedKey = null;
try {
encryptedKey = ECCUtil.publicEncrypt(nonce,receiverECPublicKey.getECPublicKey());
} catch (Exception e) {
e.printStackTrace();
System.out.println(" do something!!!!");
}
System.out.println("加密后对称密钥: " + HexUtils.toHex(encryptedKey));
// 将对称密钥加密后的数据,密文组装后,进行网络传输。
// 组装 demo
/**
* 4 byte | encryptedKey | 4 byte | encryptedData
* 对称密钥加密后的数据长度 | ECC 加密后的对称秘钥 | 密文数据长度 | AES 加密后的密文
*/
ByteBuffer bytebuffer = ByteBuffer.allocate( 4 + encryptedKey.length + 4 +encryptedData.length);
bytebuffer.putInt(encryptedKey.length);
bytebuffer.put(encryptedKey);
bytebuffer.putInt(encryptedData.lengt
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于ECC+AES 实现的双向验证加解密。数字信封的 加解密。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: eos-crypto-java 目前可以支持 基于 ECC+AES 的加解密方式。 在本压缩包中,包含基于jdk1.5 打好的jar 包。 EOS 公钥加密,私钥解密。基于ECC+AES 实现的双向验证加解密。数字信封的 加解密 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。
资源推荐
资源详情
资源评论
收起资源包目录
eos-crypto-java-master.zip (41个子文件)
eos-crypto-java-master
pom.xml 2KB
src
test
java
com
eos
crypto
EccTest.java 21KB
main
java
com
eos
crypto
digest
Sha512.java 2KB
GeneralDigest.java 3KB
Ripemd160.java 19KB
MyCipher.java 285B
Sha256.java 3KB
ec
EosEcUtil.java 8KB
EcDsa.java 15KB
EosPublicKey.java 5KB
CurveParam.java 3KB
SecretKey.java 2KB
InternalECIES.java 940B
EcCurve.java 4KB
EosPrivateKey.java 8KB
EcPoint.java 5KB
EcSignature.java 6KB
EcTools.java 5KB
EcFieldElement.java 6KB
types
EosByteWriter.java 4KB
EosByteReader.java 3KB
EosType.java 2KB
Hmac.java 5KB
exception
AtomicCryptoException.java 1002B
CryptoException.java 2KB
EosKeyExpection.java 245B
util
StandardCharsets.java 1KB
Base58.java 8KB
CertificateUtils.java 7KB
CryptUtil.java 7KB
RefValue.java 1KB
BitUtils.java 7KB
WalletImportFormat.java 2KB
HexUtils.java 4KB
Arrays.java 1KB
PEMUtils.java 2KB
StringUtils.java 1KB
ECCUtil.java 2KB
MTRandom.java 12KB
readme.md 12KB
eos-crypto-java.jar 58KB
共 41 条
- 1
资源评论
小英子架构
- 粉丝: 1014
- 资源: 4085
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功