区块链学习第二周

本文介绍了Java编程的命名规范,包括类名、方法名、变量名等,并讲解了Java中的八种基本数据类型。此外,文章还详细阐述了四种常见的加密算法:BASE64、MD5、SHA和HMAC,包括它们的用途和特点。
摘要由CSDN通过智能技术生成
1.和c++一样大小写是两种字符
2.所有方法名都应以小写字母开头
3.文件后缀名为.java(小写)
4.
Java的八种基本类型:(按字节来分)
boolean 布尔型 1个字节 8bit(8位)
byte 字节类型 1个字节
char 字符类型 2个字节
short 短整型 2个字节
int 整型 4个字节
float 浮点型(单精度)4个字节
long 长整型 8个字节
double 双精度类型 8个字节
Java中默认的整数类型是int,如果要定义为long ,则要在数值后加上L或者l
默认的浮点型是双精度浮点,如果要定义float,则要在数值后面加上f或者F
一个字节等于8位,1个字节等于256个数。2^8
一个英文字母或者阿拉伯数字占一个字节
一个汉字占2个字节
5.
1、 项目名全部小写
2、 包名全部小写
3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如:public class MyFirstClass{}
4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。
6.
package的命名: package 的名字由全部小写的字母组成,例如:com.runoob。
class和interface的命名: class和interface的名字由大写字母开头而其他字母都小写的单词组成,例如:Person,RuntimeException。
class变量的命名: 变量的名字用一个小写字母开头,后面的单词用大写字母开头,例如:index,currentImage。
class 方法的命名: 方法的名字用一个小写字母开头,后面的单词用大写字母开头,例如:run(),getBalance()。
staticfinal变量的命名: static final变量的名字所有字母都大写,并且能表示完整含义。例如:PI,PASSWORD。
参数的命名: 参数的名字和变量的命名规范一致。
数组的命名: 数组应该总是用这样的方式来命名:byte[] buffer。
7.
package语句,该部分至多只有一句,必须放在源程序的第一句。
import语句,该部分可以有若干import语句或者没有,必须放在所有的类定义之前。
public classDefinition,公共类定义部分,至多只有一个公共类的定义,Java语言规定该Java源程序的文件名必须与该公共类名完全一致。
classDefinition,类定义部分,可以有0个或者多个类定义。
interfaceDefinition,接口定义部分,可以有0个或者多个接口定义。
8.
在 Java 中,只有数字类型才能参与运算。但是每个数据类型都有他的取值范围。
例如 byte 数据类型,它的取值范围为 -128 - 127 。
当我们使用 byte b = 128; 时,肯定会报错。
但是使用 byte b = 127+1; 并不会报错。
而且运算的结果为 -128。

密码学

Java中4大基本加密算法解析

1. BASE64
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。

package com.cn.单向加密;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class BASE64 {

public static byte[] decryptBASE64(String key) throws Exception {

return (new BASE64Decoder()).decodeBuffer(key);

}

public static String encryptBASE64(byte[] key) throws Exception {

return (new BASE64Encoder()).encodeBuffer(key);

}

public static void main(String[] args) {

String str="12345678";

try {

String result1= BASE64.encryptBASE64(str.getBytes());

System.out.println("result1=====加密数据=========="+result1);

byte result2[]= BASE64.decryptBASE64(result1);

String str2=new String(result2);

System.out.println("str2========解密数据========"+str2);

} catch (Exception e) {

e.printStackTrace();

}

}

}

2. MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。

package com.cn.单向加密;

import java.math.BigInteger;

import java.security.MessageDigest;

public class MD5 {

public static final String KEY_MD5 = "MD5";

public static String getResult(String inputStr)

{

System.out.println("=======加密前的数据:"+inputStr);

BigInteger bigInteger=null;

try {

MessageDigest md = MessageDigest.getInstance(KEY_MD5);

byte[] inputData = inputStr.getBytes();

md.update(inputData);

bigInteger = new BigInteger(md.digest());

} catch (Exception e) {e.printStackTrace();}

System.out.println("MD5加密后:" + bigInteger.toString(16));

return bigInteger.toString(16);

}

public static void main(String args[])

{

try {

String inputStr = "简单加密8888888888888888888";

getResult(inputStr);

} catch (Exception e) {

e.printStackTrace();

}

}

}

MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
3.SHA
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。

package com.cn.单向加密;

import java.math.BigInteger;

import java.security.MessageDigest;

public class SHA {

public static final String KEY_SHA = "SHA";

public static String getResult(String inputStr)

{

BigInteger sha =null;

System.out.println("=======加密前的数据:"+inputStr);

byte[] inputData = inputStr.getBytes();

try {

MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);

messageDigest.update(inputData);

sha = new BigInteger(messageDigest.digest());

System.out.println("SHA加密后:" + sha.toString(32));

} catch (Exception e) {e.printStackTrace();}

return sha.toString(32);

}

public static void main(String args[])

{

try {

String inputStr = "简单加密";

getResult(inputStr);

} catch (Exception e) {

e.printStackTrace();

}

}

}

4.HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。

package com.cn.单向加密;

import javax.crypto.KeyGenerator;

import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import com.cn.comm.Tools;

public abstract class HMAC {

public static final String KEY_MAC = "HmacMD5";

public static String initMacKey() throws Exception {

KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);

SecretKey secretKey = keyGenerator.generateKey();

return BASE64.encryptBASE64(secretKey.getEncoded());

}

public static String encryptHMAC(byte[] data, String key) throws Exception {

SecretKey secretKey = new SecretKeySpec(BASE64.decryptBASE64(key), KEY_MAC);

Mac mac = Mac.getInstance(secretKey.getAlgorithm());

mac.init(secretKey);

return new String(mac.doFinal(data));

}

public static String getResult1(String inputStr)

{

String path=Tools.getClassPath();

String fileSource=path+"/file/HMAC_key.txt";

System.out.println("=======加密前的数据:"+inputStr);

String result=null;

try {

byte[] inputData = inputStr.getBytes();

String key = HMAC.initMacKey(); /*产生密钥*/

System.out.println("Mac密钥:===" + key);

/*将密钥写文件*/

Tools.WriteMyFile(fileSource,key);

result= HMAC.encryptHMAC(inputData, key);

System.out.println("HMAC加密后:===" + result);

} catch (Exception e) {e.printStackTrace();}

return result.toString();

}

public static String getResult2(String inputStr)

{

System.out.println("=======加密前的数据:"+inputStr);

String path=Tools.getClassPath();

String fileSource=path+"/file/HMAC_key.txt";

String key=null;;

try {

/*将密钥从文件中读取*/

key=Tools.ReadMyFile(fileSource);

System.out.println("getResult2密钥:===" + key);

} catch (Exception e1) {

e1.printStackTrace();}

String result=null;

try {

byte[] inputData = inputStr.getBytes();

/*对数据进行加密*/

result= HMAC.encryptHMAC(inputData, key);

System.out.println("HMAC加密后:===" + result);

} catch (Exception e) {e.printStackTrace();}

return result.toString();

}

public static void main(String args[])

{

try {

String inputStr = "简单加密";

/*使用同一密钥:对数据进行加密:查看两次加密的结果是否一样*/

getResult1(inputStr);

getResult2(inputStr);

} catch (Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值