• 本文的目标是让需要对中文论文进行排版的 OS X 用户安装配置好中文环境,编译示例得到 foo.pdf。
  • 如果只需排版英文,那么中文配置部分可以跳过。
  • 如果是 Linux/Unix 或 Windows 用户,将 Skim 换成相应的 pdf阅读器(LaTeXing 默认设置中有提及)后,LaTeXing 部分仍适用,但 MacTeX 部分不再适用。

AES (Advanced Encryption Standard) 是由 NIST (美国国家标准与技术研究院) 发布于 FIPS PUB 197 用来替代 DES (Data Encryption Standard) 的高级加密标准。而 Rijndael 算法是被 NIST 认为符合 AES 且被采用的一种对称加密算法,所以一般对 AES 和 Rijndael 算法这两个概念不予细究。

由于本文主要介绍 AES 算法的实现,对其原理不作详细介绍,所以和算法实现有关的数学知识我就只粗略提一下。文中出现的伪代码和实际实现有些出入,仅供读者理解算法各部分的实现思路。至于算法的各种实现细节,可以参考我用 python 写的源代码



定义

顾名思义,创建于外部类之内的类。可以定义于外部类的方法内。下面用I类表内部类,O类表外部类。(I:inner,O:outer)

用途

  1. private修饰的内部类用来隐藏实现的细节
  2. 匿名类使方法实现更简洁、优美(例:工厂方法,适配器方法)
  3. 可用于有效的实现“多重继承”

示例

 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
/*
由这个实例可看出同一个类中初始化的先后顺序是:
1.静态变量&&静态代码块(靠前的先初始化)
2.非静态变量&&非静态代码块(靠前的先初始化)
*/
public class InitializeDemo {
    {
        System.out.println("block 1");
    }
    static{
        System.out.println("static block 1");
    }
    String a = f();
    {
        b = "string b2";
        System.out.println("block 2");
    }
    static String b = "string b1";
    static{
        System.out.println(b);
        System.out.println("static block 2");
    }
    String f(){
        System.out.println("f()");
        return b;
    }
    public static void main(String[] args) {
        /*
        注释掉1、2行可以发现:
        静态代码块、静态变量初始化在该类被使用之前执行
        非静态代码块、非静态变量在创建对象时被执行
        */
        InitializeDemo ini = new InitializeDemo();   //1
        System.out.println(ini.a);                   //2
        System.out.println(b);
    }
}