提高代码质量的秘诀:类、方法、字段和包注释

JDK提供了一个很有用的工具,叫做javadoc,它可以由源文件生成一个HTML文档。如果在源代码中添加以特殊定界符/**开始的注释,那么你就可生成一个看上去具有专业水准的文档。Java文档注册可以提高代码的可读性和维护性。其中的关键是使用合适的注释,Java的注释有许多种类:

 

🍢 一、注释的插入

在Java中添加注释非常简单。只需要在代码前面加上两个斜线“//”,就可以在该行之后添加单行注释:

 

// 这是单行注释

你还可以将任何文本放在一个多行注释块内:

/*
 
● 多行注释。
 
●  在块注释中,可以分解成多段注释。

 */

🍣 二、类注释

/**
 
● 这是类的说明 */

其中,星号(*)后的内容是用于为Java文档工具生成类库文档所需的标记。它包含了类的一般描述和一些相关信息。这样的类注释使得您的代码复用更加容易。

🍤 三、方法注释

/**
 
这是方法的说明
@param p1 参数说明
@param p2 参数说明
@return 返回值说明
@exception 异常说明 */

这种注释中带有参数说明、返回值说明和异常说明,旨在帮助开发人员理解当前方法的目的和如何使用它。

🍥 四、字段注释

字段注释应在字段的定义之前进行,在格式上与变量声明类似:

/**
 
对于该字段的描述 */ 
private String fieldName;

这样可以对自身或者其他开发人员解释一个字段存在的意义,非常有利于代码理解和后期维护。

🥮 五、通用注释

标记 @since text 会建立一个 “since”(始于)条目。text(文本)可以是对引入这个特性的版本的描述。例如:@since 1.7.1。

 

@author name

这个标记将建立一个“author”(作者)条目,可以由多个@author标记,每个@author标记对应一个作者。并不是非得使用这个标记,你的版本控制系统能够更好地跟踪作者。

 

@version text

这个标记将建立一个“version”(版本)条目。这里的text可以是对当前版本的任何描述。

 

通过@see和@link标记,可以使用超链接,链接到javadoc文档的相关部分或外部文档。

🍡 六、包注释

要想产生包注释,就需要在每个包目录中添加一个单独的文件。可以由如下两个选择:

 

1、提供一个名为package-info.java的Java文件。这个文件必须包含一个初始的Javadoc注释,以/**和*/界定,后面是一个package语句。它不能包含更多的代码或注释。

 

2、提供一个名为package.html的HTML文件,抽取标记<body>…<body>之间的所有文本

/**
 
package-info 文件提供关于当前包的全局说明,
可以简要描述该包中提供的类、函数和语言结构以及为何这些元素会彼此相关联。 */

 

本文出自:https://blog.csdn.net/m0_61961937/article/details/131032213

【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列

MySQL的加解密及压缩函数
许多加密和压缩函数返回结果可能包含任意字节值的字符串。如果要存储这些结果,请使用具有VARBINARY或BLOB二进制字符串数据类型的列。这避免了删除尾随空格或转换字符集可能改变数据值的潜在问题,例如使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT)时可能发生的问题。

MySQL加解密函数
MySQL自带的加解密函数主要有以下:

一些加密函数返回 ASCII 字符字符串:MD5()、PASSWORD()、SHA()、SHA1()、SHA2()。它们的返回值为具有由character_set_connection和collation_connection系统确定的字符集和排序规则的字符串 变量。这是一个非二进制字符串,除非字符集为 。

如果应用程序存储来自返回十六进制字符串的函数(如 MD5() 或 SHA1() 的值) 数字,可以通过以下方式获得更有效的存储和比较 使用 UNHEX() 将十六进制表示形式转换为二进制,并将结果存储在 BINARY(N) 列中。

将十六进制字符串存储在 CHAR 列中的大小损失至少为两倍, 如果值存储在使用该字符集的列中,则最多 4 次(其中每个字符使用 <> 字节)。存储字符串也会导致比较速度变慢 因为值较大且需要采用字符集 将排序规则考虑在内。

ENCODE()、DECODE()

已在5.7.2版本弃用,目前仍可用,但将在后续版本中删除。

DES_ENCRYPT()、DES_DECRYPT()

AES_ENCRYPT()加密与AES_DECRYPT()解密
AES高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。

AES_ENCRYPT和AES_DECRYPT在MySQL中是进行加密了,如果你需要对MySQL某些字段进行加解密的话,使用MySQL的加解密函数可能比程序中处理更方便.

AES_ENCRYPT(‘密码’,‘钥匙’)
AES_DECRYPT(表的字段名字,‘钥匙’)
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB

函数参数(MySQL版本小于等于5.7.6)
AES_ENCRYPT(str,key_str),其中str为待加密字符串,key_str为秘钥

AES_DECRYPT(crypt_str,key_str),其中crypt_str为已加密的二进制串,key_str为秘钥

已在5.7.6版本弃用,目前仍可用,但将在后续版本中删除。

AES_ENCRYPT()、AES_DECRYPT()

推荐使用这对加解密函数。aes_encrypt()和aes_decrypt()使用官方的aes(高级加密标准)算法(以前称为“rijndael”)实现数据的加密和解密。

加密后的二进制串长度可以通过下面公式计算:

16 * (trunc(string_length / 16) + 1)

函数参数(MySQL版本大于等于5.7.6)
函数参数
AES_ENCRYPT(str,key_str[,init_vector]),其中str为待加密字符串,key_str为秘钥,其中init_vector根据选择不同的块加密模式为可选项

AES_DECRYPT(crypt_str,key_str[,init_vector]),其中crypt_str为已加密的二进制串,key_str为秘钥,其中init_vector根据选择不同的块加密模式为可选项

st和key_str参数可以是任何长度,init_vector参数不得小于16个字符。可以通过block_encryption_mode参数,控制块加密模式,默认值为:aes-128-ecb。可配置的形式为:aes-keylen–mode。

keylen可配置为128, 192, 256

mode可配置为ECB, CBC, CFB1, CFB8, CFB128, OFB。

下表展示了不同mode是否需要init_vector参数。

默认的ECB模式不需要init_vector参数,用法与5.7.4以前相同。

修改块加密模式:

set block_encryption_mode=’aes-256-cbc’;

查看对应的加解密模式

show variables like ‘block%;

block_encryption_mode
此变量控制的块加密模式,基于块的算法,例如 AES。它会影响 AES_ENCRYPT() 和 AES_DECRYPT() 的加密。

block_encryption_mode需要格式中的值,其中 Keylen是关键位和模式的长度为加密模式。该值不区分大小写。允许的键值为 128、192 和 256. 允许的加密模式取决于 MySQL 是否 使用 OpenSSL 或 yaSSL 编译:aes-keylen-mode。

例如,此语句会导致 AES 加密 使用 256 位密钥长度和 CBC 模式的函数:

SET block_encryption_mode = ‘aes-256-cbc’;

尝试将block_encryption_mode设置为包含不受支持的密钥长度或模式的值不支持SSL库。

AES_ENCRYPT(str,key_str[,init_vector][,kdf_name][,salt][,info | iterations])

AES_ENCRYPT加密 字符串 str 使用键字符串 key_str,并返回二进制文件 包含加密输出的字符串。AES_DECRYPT() 使用密钥字符串key_str解密加密字符串crypt_str,并返回原始 纯文本字符串。如果任一函数参数为 ,则该函数返回 。如果 AES_DECRYPT检测到无效 数据或填充不正确,它将返回 . 但是,AES_DECRYPT() 有可能 返回非值(可能是垃圾) 如果输入数据或键无效。NULLNULLNULLNULL

使用AES_DECRYPT()的语句对于基于语句的复制。

AES_DECRYPT(crypt_str,key_str[,init_vector][,kdf_name][,salt][,info | iterations])

AES_ENCRYPT() 和 AES_DECRYPT() 允许控制 块加密模式。block_encryption_mode系统 变量控制基于块的加密模式 算法。其默认值为 ,表示加密 使用 128 位的密钥长度和 ECB 模式。有关说明 此变量的允许值,请参见第 5.1.7 节 “服务器系统变量”。这 可选init_vector参数为 用于为块加密提供初始化向量 需要它的模式。aes-128-ecb

本文出自:https://blog.csdn.net/l569590478/article/details/132187930