文档章节

JAVA加密算法(1)- 密码学概述及BASE64算法使用

我有切糕
 我有切糕
发布于 2016/11/11 10:43
字数 368
阅读 7
收藏 0

#密码学综述

##密码学基本功能

机密性、鉴别、报文完整性、不可否认性

##基本模型

sender-->加密算法 --> 密文 --> 解密算法 --> receiver

密钥源

##密码学算法分类:

消息编码:Base64

消息摘要:MD类,SHA类,MAC

对称加密:DES,3DES,AES

非对称加密:RSA,DH密钥交换

数字签名:RSA signature,DSA signature

密码学五元组

明文、密文、加密算法、解密算法、密钥

加密解密算法都要使用公开算法(经过验证)

##Java编程中的常用类

(1)消息编码 BASE64Encoder,BASE64Decoder

(2)消息摘要

MessageDigest

(3)对称密码

KeyGenerator、SecretKey、Cipher

(4)非对称密码 KeyPairGenerator、KeyFactory、KeyPair、PublicKey、PrivateKey、Cipher

(5)数字签名

Signature

JDK提供的Base64编码操作

import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Base64Util {

  public static String encrypt(byte[] data) {
    return new BASE64Encoder().encode(data);
  }
  
  public static String decrypt(String data) throws IOException {
    return new String(new BASE64Decoder().decodeBuffer(data));
  }
  
  public static void main(String[] args) throws IOException {
    String data = "1234567890";
    
    String result = Base64Util.encrypt(data.getBytes());
    System.out.println(data +" 使用Base64编码的结果: "+result);
    
    String result2 = Base64Util.decrypt(result);
    System.out.println(result + "使用Base64解码的结果:" +result2);
    
  }
}

运行结果:

1234567890 使用Base64编码的结果: MTIzNDU2Nzg5MA==
MTIzNDU2Nzg5MA==使用Base64解码的结果:1234567890

PS1: Eclipse中找不到sun.misc.BASE64Encoder包的解决方法: 在工程的build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

PS2: 其他提供Base64操作的jar包, Apache Commons Codec(简称CC), Bouncy Castle(BC)

© 著作权归作者所有

我有切糕
粉丝 1
博文 10
码字总数 6741
作品 0
朝阳
技术主管
私信 提问
深入剖析企业级数据安全性加密、解密算法体系实战汇总

资源下载链接-https://pan.baidu.com/s/1mhZY9mC 密码: 6wrg 目前很多企业应用领域的架构师都很关注加密与解密算法在应用中的使用,譬如用户密码加密、网络协议加密等。如何在名目繁多的Jav...

huanyingmous
2017/08/28
626
0
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书...

mrliuze
2015/05/27
178
0
Scrypt 不止是加密算法,也是莱特币的挖矿算法

在密码学中,scrypt(念作“ess crypt”)是Colin Percival于2009年所发明的金钥推衍函数,当初设计用在他所创立的Tarsnap服务上。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量内存运...

fengzhizi715
2018/08/05
0
0
Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C
2018/05/08
0
0
Java AES算法和openssl配对

近日工作上的原因,需要实现Java AES算法和C语言下基于openssl的AES 算法通信。这是个老问题了,网上搜到不少资料,但都不是很详细,没能解决问题。只能自己来了。 先说说AES算法。AES算法的...

gesuper
2013/11/04
7.6K
4

没有更多内容

加载失败,请刷新页面

加载更多

【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
13
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
13
0
【Medium 万赞好文】ViewModel 和 LIveData:模式 + 反模式

原文作者: Jose Alcérreca 原文地址: ViewModels and LiveData: Patterns + AntiPatterns 译者:秉心说 View 和 ViewModel 分配责任 理想情况下,ViewModel 应该对 Android 世界一无所知。...

秉心说
昨天
16
0
重学计算机组成原理(十二) - 异常和中断

1 概览 完好的程序都满足以下特征 自动运行 我们的程序和指令都是一条条顺序执行,不需要通过键盘或者网络给这个程序任何输入 正常运行 没有遇到计算溢出之类的程序错误。 不过,现实的软件世...

JavaEdge
昨天
11
0
程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部