资源简介
做安全测评用到国密算法,编写的小程序,之前在网上找到一个资源加密后的解雇不对,这个是经过验证通过可用的加密算法,有CBC和ECB两种方式的demo,花了一上午终于搞定,运行里面的MainTest类的main函数可用。
代码片段和文件信息
package com.netpower.sms4;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import sun.misc.base64Decoder;
import sun.misc.base64Encoder;
public class MainTest {
private String secretKey = “JeF8U9wHFOMfs2Y8“;
private String iv = “UISwD9fW6cFh9SNS“;
private boolean hexString = false;
public MainTest() {
}
public String encryptData_ECB(String plainText) {
try {
SMS4Context ctx = new SMS4Context();
ctx.isPadding = true;
ctx.mode = SMS4.SM4_ENCRYPT;
byte[] keyBytes;
if (hexString) {
keyBytes = Util.hexStringToBytes(secretKey);
} else {
keyBytes = secretKey.getBytes();
}
SMS4 SMS4 = new SMS4();
SMS4.sm4_setkey_enc(ctx keyBytes);
byte[] encrypted = SMS4.sm4_crypt_ecb(ctx plainText.getBytes(“GBK“));
String cipherText = new base64Encoder().encode(encrypted);
if (cipherText != null && cipherText.trim().length() > 0) {
Pattern p = Pattern.compile(“\\s*|\t|\r|\n“);
Matcher m = p.matcher(cipherText);
cipherText = m.replaceAll(““);
}
return cipherText;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String decryptData_ECB(String cipherText) {
try {
SMS4Context ctx = new SMS4Context();
ctx.isPadding = true;
ctx.mode = SMS4.SM4_DECRYPT;
byte[] keyBytes;
if (hexString) {
keyBytes = Util.hexStringToBytes(secretKey);
} else {
keyBytes = secretKey.getBytes();
}
SMS4 SMS4 = new SMS4();
SMS4.sm4_setkey_dec(ctx keyBytes);
byte[] decrypted = SMS4.sm4_crypt_ecb(ctx new base64Decoder().decodeBuffer(cipherText));
return new String(decrypted “GBK“);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String encryptData_CBC(String plainText) {
try {
SMS4Context ctx = new SMS4Context();
ctx.isPadding = true;
ctx.mode = SMS4.SM4_ENCRYPT;
byte[] keyBytes;
byte[] ivBytes;
if (hexString) {
keyBytes = Util.hexStringToBytes(secretKey);
ivBytes = Util.hexStringToBytes(iv);
} else {
keyBytes = secretKey.getBytes();
ivBytes = iv.getBytes();
}
SMS4 SMS4 = new SMS4();
SMS4.sm4_setkey_enc(ctx keyBytes);
byte[] encrypted = SMS4.sm4_crypt_cbc(ctx ivBytes plainText.getBytes(“GBK“));
String cipherText = new base64Encoder().encode(encrypted);
if (cipherText != null && cipherText.trim().length() > 0) {
Pattern p = Pattern.compile(“\\s*|\t|\r|\n“);
Matcher m = p.matcher(cipherText);
cipherText = m.replaceAll(““);
}
return cipherText;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String decryptData_CBC(String cipherText) {
try {
SMS4Context ctx = new SMS4Context();
ctx.isPadding = true;
ctx.mode = SMS4.SM4_DECRYPT;
byte[] keyBytes;
byte[] ivBytes;
if (hexString) {
keyBytes = Util.hexStringToBytes(secretKey);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-07-30 20:36 SM4\
文件 232 2017-07-30 20:29 SM4\.classpath
文件 379 2017-07-30 20:29 SM4\.project
目录 0 2017-07-30 20:36 SM4\.settings\
文件 88 2017-08-01 14:47 SM4\.settings\org.eclipse.core.resources.prefs
文件 598 2017-07-30 20:29 SM4\.settings\org.eclipse.jdt.core.prefs
目录 0 2017-08-17 11:03 SM4\bin\
目录 0 2017-08-17 11:03 SM4\bin\com\
目录 0 2017-08-17 14:45 SM4\bin\com\netpower\
目录 0 2017-08-17 14:58 SM4\bin\com\netpower\sms4\
文件 4154 2017-08-17 14:59 SM4\bin\com\netpower\sms4\MainTest.class
文件 8114 2017-08-17 14:45 SM4\bin\com\netpower\sms4\SMS4.class
文件 419 2017-08-17 14:46 SM4\bin\com\netpower\sms4\SMS4Context.class
文件 10072 2017-08-17 14:47 SM4\bin\com\netpower\sms4\Util.class
目录 0 2017-07-30 20:36 SM4\src\
目录 0 2017-07-30 20:36 SM4\src\com\
目录 0 2017-08-17 14:45 SM4\src\com\netpower\
目录 0 2017-08-17 14:58 SM4\src\com\netpower\sms4\
文件 3737 2017-08-17 14:59 SM4\src\com\netpower\sms4\MainTest.java
文件 12465 2017-08-17 14:45 SM4\src\com\netpower\sms4\SMS4.java
文件 308 2017-08-17 14:45 SM4\src\com\netpower\sms4\SMS4Context.java
文件 20151 2017-08-17 14:47 SM4\src\com\netpower\sms4\Util.java
- 上一篇:简易电子琴的设计微机原理课程设计
- 下一篇:Linux下posix线程实现的定时器
评论
共有 条评论