LockscreenCredential 类方法详解
LockscreenCredential 是 Android 系统中用于表示锁屏凭证(如 PIN、密码、图案等)的类,它封装了用户设置的解锁凭据,并提供安全的方式来处理和验证这些凭据。这个类主要用于系统锁屏、设备加密以及用户认证等场景。
LockscreenCredential 类方法详解
构造函数和创建方法
私有构造函数
private LockscreenCredential(int type, byte[] credential)
私有构造函数,用于内部创建密码对象。根据类型验证密码数据的有效性并存储引用。
创建不同类型密码的方法
创建空密码
public static LockscreenCredential createNone()
创建表示无密码(空密码)的对象。
创建图案密码
public static LockscreenCredential createPattern(@NonNull List<LockPatternView.Cell> pattern)
基于图案点列表创建图案密码对象。
创建字符密码
public static LockscreenCredential createPassword(@NonNull CharSequence password)
基于字符序列创建密码对象。
创建管理密码
public static LockscreenCredential createManagedPassword(@NonNull byte[] password)
创建用于统一挑战的托管密码对象。
创建PIN码
public static LockscreenCredential createPin(@NonNull CharSequence pin)
基于数字序列创建PIN码对象。
创建密码或空密码
public static LockscreenCredential createPasswordOrNone(@Nullable CharSequence password)
如果输入为空则创建空密码,否则创建字符密码。
创建PIN码或空密码
public static LockscreenCredential createPinOrNone(@Nullable CharSequence pin)
如果输入为空则创建空密码,否则创建PIN码。
密码属性查询方法
获取密码类型
public int getType()
返回密码类型,可以是无密码、图案、PIN或密码类型之一。
获取密码字节数据
public byte[] getCredential()
返回密码的原始字节数据,这是内部字段的直接引用,调用者不应修改它。
类型判断方法
public boolean isNone() // 是否为空密码
public boolean isPattern() // 是否为图案密码
public boolean isPin() // 是否为PIN码
public boolean isPassword() // 是否为字符密码
获取密码长度
public int size()
返回密码的长度。
密码操作方法
复制密码
public LockscreenCredential duplicate()
创建当前密码的副本。
清零密码
public void zeroize()
将密码字节数据清零,安全地从内存中删除密码。
检查密码长度
public void checkLength()
检查密码是否满足最小长度要求,如果密码太短则抛出异常。
验证密码类型匹配
public boolean checkAgainstStoredType(int storedCredentialType)
检查当前密码类型是否与存储的密码类型匹配。
密码哈希处理方法
生成历史密码哈希
public String passwordToHistoryHash(byte[] salt, byte[] hashFactor)
public static String passwordToHistoryHash(byte[] passwordToHash, byte[] salt, byte[] hashFactor)
使用SHA-256算法为密码历史检查生成密码哈希值。
生成历史密码哈希(旧版)
@Deprecated
public static String legacyPasswordToHash(byte[] password, byte[] salt)
使用SHA-1和MD5算法生成密码哈希值(已弃用,安全性较低)。
序列化方法
写入Parcel
@Override
public void writeToParcel(Parcel dest, int flags)
将密码对象写入Parcel进行序列化。
从Parcel创建对象
public static final Parcelable.Creator<LockscreenCredential> CREATOR
用于从Parcel中创建密码对象的Creator。
描述内容
@Override
public int describeContents()
描述对象内容,始终返回0。
资源管理方法
关闭资源
@Override
public void close()
实现AutoCloseable接口,用于自动清零密码数据。
对象比较方法
计算哈希码
@Override
public int hashCode()
重写hashCode方法,用于对象哈希计算。
判断相等性
@Override
public boolean equals(Object o)
重写equals方法,用于比较两个密码对象是否相等。
辅助方法
确保未被清零
private void ensureNotZeroized()
检查密码是否已被清零,如果已清零则抛出异常。
字符序列转字节数组
private static byte[] charSequenceToByteArray(CharSequence chars)
将字符序列转换为字节数组,避免创建额外副本。