0%

消息摘要算法

消息摘要算法包含有MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)三大系列,常用于验证数据的完整性

MD算法

MD算法的主要代表为MD5。

MD5是一种单向加密算法,只能加密不能解密,所以一般是用来做数据一致性验证而不是作为数据加密。其原理是将信息产生一个128位的信息摘要,然后将128位的二进制转为十六进制,得到一个32位的字符串

1
2
3
4
5
6
String inputText = "123456";
MessageDigest m = MessageDigest.getInstance("md5");
// 摘要处理
byte[] s = m.digest(inputText.getBytes(StandardCharsets.UTF_8));

return new String(Hex.encodeHex(s,false));
阅读全文 »

获取汉语拼音

之前有个需求是要显示汉语拼音,然后找了一个工具包

1
2
3
4
5
6
<!-- 汉语拼音 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>

来个栗子

1
2
3
4
5
HanyuPinyinOutputFormat hanyuPinyinOutputFormat = new HanyuPinyinOutputFormat();
hanyuPinyinOutputFormat.setToneType(WITHOUT_TONE);
System.out.println(PinyinHelper.toHanYuPinyinString("北京市", hanyuPinyinOutputFormat, "", true));

// 输出 beijingshi

但是有时候是多音字的怎么处理的,比如长沙市

阅读全文 »

邮件带附件发送

依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.29.RELEASE</version>
</dependency>

有时候发送邮件需要带有附件,可以使用MimeMessageHelper来进行发送附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("smtp.exmail.qq.com");
sender.setPort(587); // 默认就是25
sender.setUsername("username");
sender.setPassword("password");
sender.setDefaultEncoding("UTF-8");

// 配置文件对象
Properties props = new Properties();
props.put("mail.smtp.auth", "true"); // 是否进行验证
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtps.ssl.checkserveridentity", "true");
props.put("mail.smtps.ssl.trust", "*");
Session session = Session.getInstance(props);
sender.setSession(session);

MimeMessage mail = sender.createMimeMessage();

MimeMessageHelper helper;
try {
// 开启发送文件
helper = new MimeMessageHelper(mail,true);
} catch (MessagingException e) {
return false;
}


try {
helper.setTo(to); // 发送给谁
helper.setCc(cc); // 抄送
helper.setSubject(title); // 标题
helper.setFrom("username"); // 来自
// 邮件内容,第二个参数指定发送的是HTML格式
helper.setText(textBody, true);
// 发送附件
helper.addAttachment(file.getName(),file);
sender.send(mail); // 发送
}catch(Exception e) {
}

POI操作EXCEL合并单元格

依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>

使用CellRangeAddress进行合并单元格

1
2
3
4
// 合并单元格
// 参数列表含义分别为 起始行、终止行、起始列、终止列
CellRangeAddress deviceCellRange = new CellRangeAddress(startRow, startRow + 2, 1, 1);
sheet.addMergedRegion(deviceCellRange);

POI操作EXCEL插入图片

依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>

使用HSSFPatriarch来将图片写入EXCEL中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
BufferedImage bufferImg;//图片
ByteArrayOutputStream byteArrayOut = null;
try {
// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
byteArrayOut = new ByteArrayOutputStream();
//将图片读到BufferedImage
InputStream resource = Thread.currentThread().getContextClassLoader().getResourceAsStream(imageName);
if(resource == null){
throw new BusinessException("%s资源不存在",imageName);
}
bufferImg = ImageIO.read(resource);
// 将图片写入流中
ImageIO.write(bufferImg, "png", byteArrayOut);

// 利用HSSFPatriarch将图片写入EXCEL
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义单元格位置
HSSFCreationHelper creationHelper = workbook.getCreationHelper();
HSSFClientAnchor clientAnchor = creationHelper.createClientAnchor();
clientAnchor.setCol1(columnNo);
clientAnchor.setRow1(rowNo);


// 插入图片 PICTURE_TYPE_PNG是图片的类型
HSSFPicture picture = patriarch.createPicture(clientAnchor, workbook.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
picture.resize(2.5);

} catch (IOException e) {
LOGGER.error("图片写入excel失败", e);
} finally {
if (byteArrayOut != null) {
try {
byteArrayOut.close();
} catch (IOException e) {
LOGGER.error("关闭流失败", e);
}
}

}

注:在将图片添加到工作簿中时,必须将其存储为字节数组