LockscreenCredential 是 Android 系统中用于表示锁屏凭证(如 PIN、密码、图案等)的类,它封装了用户设置的解锁凭据,并提供安全的方式来处理和验证这些凭据。这个类主要用于系统锁屏、设备加密以及用户认证等场景。
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)
创建用于统一挑战的托管密码对象。
public static LockscreenCredential createPin(@NonNull CharSequence pin)
基于数字序列创建PIN码对象。
public static LockscreenCredential createPasswordOrNone(@Nullable CharSequence password)
如果输入为空则创建空密码,否则创建字符密码。
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算法生成密码哈希值(已弃用,安全性较低)。
@Override
public void writeToParcel(Parcel dest, int flags)
将密码对象写入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)
将字符序列转换为字节数组,避免创建额外副本。