腾讯云数据加密如何使用
您购买和配置数据加密实例后,需要通过加密机客户端管理工具对数据加密实例进行管理和密钥配置。建议您购买并配置腾讯云服务器,在管理腾讯云服务器(腾讯云服务器)上安装加密机客户端管理工具对数据加密实例进行管理和密钥配置;建议您购买并配置弹性公网IP,通过弹性公网IP使远程腾讯云服务器客户端能够识别本地USB KEY。
配置加密机管理腾讯云服务器
1.请您先购买腾讯云服务器。
说明:建议您购买最新版本的Windows操作系统和按量付费的最低配置腾讯云服务器机型。腾讯云服务器需要设置安全组。为防止暴力破解,源IP设置为ANY,目的IP设置为VSM的物理IP地址,且只开启远程默认端口3389。您的业务应用、数据加密实例、管理腾讯云服务器(腾讯云服务器)需配置在同一个VPC网络下。您购买的弹性公网IP在远程桌面连接时需要配置,公网需要绑定IPV4或者IPV6的流入、流出流量。2. 通过本地终端远程桌面连接腾讯云服务器。3.拷贝加密机客户端管理工具到腾讯云服务器并进行安装。
配置加密机管理工具(仅EVSM和GVSM需要配置)
1.打开VsmManager.exe文件,在菜单栏单击系统>VSM登录管理。
2. 在TCP/IP连接对话框中,输入VSM的IP地址及端口号(EVSM端口号固定为8013,GVSM端口号固定为8019),单击登录。登录成功后,加密机管理工具面板上会显示登录成功的状态信息,您就可以对数据加密实例进行管理和密钥配置。说明:您如果想要使用身份认证卡(USB KEY)注册管理员,以管理员身份对加密机进行初始化、操作授权以及其它管理操作。您可以提交工单,腾讯云会把身份认证卡(USB KEY)和数据加密实例管理端安装程序邮寄至您所提交的联系地址。
配置完数据加密实例后,您可以通过调用数据加密API来使用数据加密实例。
在调用数据加密API时,可参考API手册。API手册通过提交工单获取。
数据加密样例:
package cn.com.tass.jce.sm4;
import cn.com.tass.jce.castle.core.jce.provider.TassProvider;
import cn.com.tass.jce.castle.tc.encodings.Hex;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.Security;
import static org.junit.jupiter.api.Assertions.fail;
public class SM4Test {
@BeforeEach
void testInit() {
Security.addProvider(new TassProvider());
}
//使用外部SM4密钥加解密
@Test
@DisplayName("SM4/ECB/PKCS7Padding test")
void sm4GenKeyTest() {
try {
byte[] plain = "1234567890".getBytes();
byte[] encData;
byte[] decData;
KeyGenerator instance = KeyGenerator.getInstance("SM4", "TASS");
instance.init(128);
SecretKey key = instance.generateKey();
System.out.println(new String(Hex.encode(key.getEncoded())));
Cipher en = Cipher.getInstance("SM4/ECB/PKCS7Padding", "TASS");//获取 TASS cipher 实例
en.init(Cipher.ENCRYPT_MODE, key);//加密模式初始化
//System.out.println(new String(Hex.encode(encData)));
Cipher de = Cipher.getInstance("SM4/ECB/PKCS7Padding", "TASS");//获取 TASS cipher 实例
de.init(Cipher.DECRYPT_MODE, key);//解密模式初始化
int i = 0 ;
long begin = System.currentTimeMillis();
while(i<10){
ncData = en.doFinal(plain);/* 加密 */
decData = de.doFinal(encData);// 解密
i++;
}
long end = System.currentTimeMillis();
System.out.println(end-begin);
//System.out.println(new String(desData));
// assertArrayEquals(desData, plain);
} catch (Exception e) {
e.printStackTrace();
fail(e);
}
}
/*