我已经看到您所有的内部类都涉及加密和解密。
您可以通过定义一个顶级函数并将其标记为
@JvmSynthetic,然后将ECryptSymmetricDecrypt和ECryptSymmetricEncrypt类设为
私有
来防止Java客户端访问您的内部类,从而轻松实现此目的,例如:
// define this top-level function in your ECryptSymmetricEncrypt.kt@JvmSynthetic internal fun <T> encrypt( input:T, password: String, cipher:Cihper, erl: ECryptResultListener, outputFile:File, getKey:(String,ByteArray)->SecretKeySpec){ ECryptSymmetricEncrypt(input, password, cipher, { pass, salt -> getKey(pass, salt) }, erl, outputFile)}但是,它解决了您的问题,但是我仍然要说,您的代码可以进一步细分。例如,加密和解密算法有很多重复项,也许您可以在加密库中应用模板方法模式,并引入接口以使您的库显式并
Cipher在实现类下隐藏操作。理想情况下,客户端代码无法
java.security.*通过
Encrypt或
Decrypt接口看到任何类。例如:
interface Encrypt{ // v--- don't include the infrastructure class here,e.g:`Keys`,`Cipher` fun enpre(...args)}interface Decrypt{ // v--- don't include the infrastructure class here,e.g:`Keys`,`Cipher` fun depre(...args)}和
它是您创建一个实例和计算结果是坏事
init块这里。
并且 您可以使用Factory Method
Pattern避免在ECryptSymmetricDecrypt和ECryptSymmetricEncrypt类中进行类型检查。



